
<!DOCTYPE HTML>
<html lang="" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>JavaWeb实战项目 · Java笔记Blog</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        <meta name="author" content="snowdreams1006">
        
        
    
    
    <link rel="stylesheet" href="gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-search-plus/search.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-back-to-top-button/plugin.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-code/plugin.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-prism/prism-tomorrow.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-timeline/timeline.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
    
        
    
        
    
        
    
        
    
        
    


    

        
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="java4.html" />
    
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="Type to search" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    
    
        
        <li>
            <a href="https://blog.lichongbing.com/" target="_blank" class="custom-link">blog</a>
        </li>
    
    

    
    <li class="divider"></li>
    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="./">
            
                <a href="./">
            
                    
                    概述
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" data-path="java5.html">
            
                <a href="java5.html">
            
                    
                    Java基础
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.2.1" data-path="java.html">
            
                <a href="java.html">
            
                    
                    Java知识思维导图
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.2" data-path="java5.html">
            
                <a href="java5.html#2">
            
                    
                    Java开发环境搭建
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.2.2.1" data-path="java5.html">
            
                <a href="java5.html#21">
            
                    
                    1.1 Java开发环境
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.2.2" data-path="java5.html">
            
                <a href="java5.html#22">
            
                    
                    1.2 安装Java开发工具箱
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.2.3" data-path="java6.html">
            
                <a href="java6.html#3">
            
                    
                    Java程序要素概览
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.4" data-path="java7.html">
            
                <a href="java7.html">
            
                    
                    Java编程基础
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.5" data-path="java8.html">
            
                <a href="java8.html">
            
                    
                    基础编程元素--运算符 表达式 语句与流程控制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.6" data-path="java9.html">
            
                <a href="java9.html">
            
                    
                    常用的数据结构--数组与枚举
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.7" data-path="java10.html">
            
                <a href="java10.html">
            
                    
                    面向对象设计的核心--类与对象
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.8" data-path="java11.html">
            
                <a href="java11.html">
            
                    
                    重复调用的代码块--方法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.9" data-path="java12.html">
            
                <a href="java12.html">
            
                    
                    面向对象设计的精华--类的封装 继承 多态
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.2.9.1" data-path="java12.html">
            
                <a href="java12.html#1">
            
                    
                    8.1 面向对象的三大特点
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.9.2" data-path="java12.html">
            
                <a href="java12.html#4">
            
                    
                    8.2 封装的实现
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.9.3" data-path="java12.html">
            
                <a href="java12.html#7">
            
                    
                    8.3 继承的实现
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.9.4" data-path="java12.html">
            
                <a href="java12.html#8">
            
                    
                    8.4 深度认识类的继承
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.9.5" data-path="java12.html">
            
                <a href="java12.html#9">
            
                    
                    8.5 覆写
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.9.6" data-path="java12.html">
            
                <a href="java12.html#12">
            
                    
                    8.6 多态的实现
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.9.7" data-path="java12.html">
            
                <a href="java12.html#10">
            
                    
                    8.7 高手点拨
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.9.8" data-path="java12.html">
            
                <a href="java12.html#11">
            
                    
                    8.8 实战练习
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.2.10" data-path="java13.html">
            
                <a href="java13.html">
            
                    
                    凝练才是美--抽象类 接口 内部类
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.2.10.1" data-path="java13.html">
            
                <a href="java13.html#1">
            
                    
                    9.1 抽象类
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.10.2" data-path="java13.html">
            
                <a href="java13.html#2">
            
                    
                    9.2 接口
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.10.3" data-path="java13.html">
            
                <a href="java13.html#3">
            
                    
                    9.3 内部类
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.10.4" data-path="java13.html">
            
                <a href="java13.html#4">
            
                    
                    9.4 匿名内部类
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.10.5" data-path="java13.html">
            
                <a href="java13.html#5">
            
                    
                    9.5 匿名对象
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.10.6" data-path="java13.html">
            
                <a href="java13.html#6">
            
                    
                    9.6 高手点拨
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.10.7" data-path="java13.html">
            
                <a href="java13.html#7">
            
                    
                    9.7 实战练习
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.2.11" data-path="java14.html">
            
                <a href="java14.html">
            
                    
                    更灵活的设计--泛型
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.12" data-path="java15.html">
            
                <a href="java15.html">
            
                    
                    更强大和方便的功能--注解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.13" >
            
                <span>
            
                    
                    设计实践--常用的设计模式
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.14" >
            
                <span>
            
                    
                    存储类的仓库--Java常用类库
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.15" >
            
                <span>
            
                    
                    防患未然--异常的捕获与处理
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.16" >
            
                <span>
            
                    
                    齐头并进，并发任务的处理--多线程
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.17" >
            
                <span>
            
                    
                    文件I/O操作
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.18" >
            
                <span>
            
                    
                    Java反射
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.19" >
            
                <span>
            
                    
                    数据持久化方法--对象序列化
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.20" >
            
                <span>
            
                    
                    Maven Git Linux的基础使用
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.3" data-path="java6.html">
            
                <a href="java6.html">
            
                    
                    JavaWeb基础
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.3.1" >
            
                <span>
            
                    
                    JavaWeb的服务器与ide工具
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.2" >
            
                <span>
            
                    
                    JSP基本语法
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.3" >
            
                <span>
            
                    
                    JSP内置对象
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.4" >
            
                <span>
            
                    
                    JavaBean技术
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.5" >
            
                <span>
            
                    
                    Servlet技术
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.6" >
            
                <span>
            
                    
                    文件的上传与下载
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.7" >
            
                <span>
            
                    
                    过滤器和监听器
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.8" >
            
                <span>
            
                    
                    JavaWeb的数据库操作
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.9" >
            
                <span>
            
                    
                    EL表达式语言
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.10" >
            
                <span>
            
                    
                    JSTL标签
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.4" >
            
                <span>
            
                    
                    JavaWeb前端
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.4.1" >
            
                <span>
            
                    
                    HTML与CSS网页开发基础
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.2" >
            
                <span>
            
                    
                    JavaScript脚本语言
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.3" >
            
                <span>
            
                    
                    Ajax技术
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.4" >
            
                <span>
            
                    
                    JQuery技术
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.5" >
            
                <span>
            
                    
                    JSON技术
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.6" >
            
                <span>
            
                    
                    Java正则表达式
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.7" >
            
                <span>
            
                    
                    Vue.js
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.8" >
            
                <span>
            
                    
                    BootStap框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.9" >
            
                <span>
            
                    
                    Flutter框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.10" >
            
                <span>
            
                    
                    Angular框架 
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.11" >
            
                <span>
            
                    
                    webpack
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.12" >
            
                <span>
            
                    
                    微信小程序
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.5" >
            
                <span>
            
                    
                    JavaWeb数据库
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.5.1" >
            
                <span>
            
                    
                    MySQL
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.2" >
            
                <span>
            
                    
                    JDBC
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.3" >
            
                <span>
            
                    
                    C3P0
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.4" >
            
                <span>
            
                    
                    Druid
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.6" >
            
                <span>
            
                    
                    JavaWeb强化
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.6.1" >
            
                <span>
            
                    
                    设计模式
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.6.2" >
            
                <span>
            
                    
                    JVM优化
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.6.3" >
            
                <span>
            
                    
                    数据结构算法
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.6.4" >
            
                <span>
            
                    
                    多线程高级
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.6.5" >
            
                <span>
            
                    
                    MINA
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.6.6" >
            
                <span>
            
                    
                    Netty
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.6.7" >
            
                <span>
            
                    
                    NIO
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.7" >
            
                <span>
            
                    
                    JavaWeb框架
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.7.1" >
            
                <span>
            
                    
                    Struct2框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.2" >
            
                <span>
            
                    
                    JPA
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.3" >
            
                <span>
            
                    
                    Spring Data
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.4" >
            
                <span>
            
                    
                    Hibemate技术
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.5" >
            
                <span>
            
                    
                    Spring核心之IoC
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.6" >
            
                <span>
            
                    
                    Spring核心之AOP
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.7" >
            
                <span>
            
                    
                    Spring MVC框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.8" >
            
                <span>
            
                    
                    Mybatis框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.9" >
            
                <span>
            
                    
                    Mybatis Plus
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.8" >
            
                <span>
            
                    
                    JavaWeb业务解决方案
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.8.1" >
            
                <span>
            
                    
                    ElasticSearch
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.2" >
            
                <span>
            
                    
                    Kibana
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.3" >
            
                <span>
            
                    
                    Logstash
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.4" >
            
                <span>
            
                    
                    LOG4J
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.5" >
            
                <span>
            
                    
                    Logback
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.6" >
            
                <span>
            
                    
                    SLF4J
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.7" >
            
                <span>
            
                    
                    Solr
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.8" >
            
                <span>
            
                    
                    D3
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.9" >
            
                <span>
            
                    
                    JCL
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.10" >
            
                <span>
            
                    
                    AntV
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.11" >
            
                <span>
            
                    
                    Beats
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.12" >
            
                <span>
            
                    
                    Lucene
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.13" >
            
                <span>
            
                    
                    POI
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.14" >
            
                <span>
            
                    
                    FreeMaker
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.15" >
            
                <span>
            
                    
                    Thymeleaf
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.16" >
            
                <span>
            
                    
                    Shiro
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.17" >
            
                <span>
            
                    
                    Spring Security
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.18" >
            
                <span>
            
                    
                    JasperReport
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.19" >
            
                <span>
            
                    
                    Quartz
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.20" >
            
                <span>
            
                    
                    Elastic-Job
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.21" >
            
                <span>
            
                    
                    Activiti
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.22" >
            
                <span>
            
                    
                    微信支付
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.23" >
            
                <span>
            
                    
                    支付宝支付
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.24" >
            
                <span>
            
                    
                    百度地图
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.25" >
            
                <span>
            
                    
                    高德地图
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.9" >
            
                <span>
            
                    
                    JavaWeb中介组件
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.9.1" >
            
                <span>
            
                    
                    Redis框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.2" >
            
                <span>
            
                    
                    FastDFS
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.3" >
            
                <span>
            
                    
                    定时任务
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.4" >
            
                <span>
            
                    
                    RabbitMQ
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.5" >
            
                <span>
            
                    
                    RocketMQ
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.6" >
            
                <span>
            
                    
                    JMS
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.7" >
            
                <span>
            
                    
                    MyCat
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.8" >
            
                <span>
            
                    
                    RabbitMQ
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.9" >
            
                <span>
            
                    
                    Kafka
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.10" >
            
                <span>
            
                    
                    Sharding-JDBC
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.11" >
            
                <span>
            
                    
                    Neo4j
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.12" >
            
                <span>
            
                    
                    MongoDB
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.13" >
            
                <span>
            
                    
                    ELK
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.14" >
            
                <span>
            
                    
                    Restful风格编程
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.15" >
            
                <span>
            
                    
                    Swagger文档
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.16" >
            
                <span>
            
                    
                    JMeter
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.10" >
            
                <span>
            
                    
                    JavaWeb微服务分布框架
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.10.1" >
            
                <span>
            
                    
                    Spring Boot框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.2" >
            
                <span>
            
                    
                    Spring Cloud框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.3" >
            
                <span>
            
                    
                    Zookeeper
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.4" >
            
                <span>
            
                    
                    Dubbo框架
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.5" >
            
                <span>
            
                    
                    Eureka
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.6" >
            
                <span>
            
                    
                    Consul
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.7" >
            
                <span>
            
                    
                    Hystrix
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.8" >
            
                <span>
            
                    
                    Zuul
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.9" >
            
                <span>
            
                    
                    Gateway
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.10" >
            
                <span>
            
                    
                    Skywalking
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.11" >
            
                <span>
            
                    
                    Pinpoint
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.11" >
            
                <span>
            
                    
                    JavaWeb部署
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.11.1" >
            
                <span>
            
                    
                    Docker
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.2" >
            
                <span>
            
                    
                    项目构建
            
                </span>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.12" data-path="java4.html">
            
                <a href="java4.html#1">
            
                    
                    JavaWeb实战项目
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.12.1" data-path="java4.html">
            
                <a href="java4.html#2">
            
                    
                    微人事项目实战
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.2" data-path="java16.html">
            
                <a href="java16.html">
            
                    
                    新蜂商城
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.13" data-path="moutn10.html">
            
                <a href="moutn10.html">
            
                    
                    2020年10月账本
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.13.1" data-path="day23.html">
            
                <a href="day23.html">
            
                    
                    10月23日
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.13.2" data-path="day29.html">
            
                <a href="day29.html">
            
                    
                    10月29日
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.14" data-path="moutn11.md">
            
                <span>
            
                    
                    2020年11月账本
            
                </a>
            

            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            Published with GitBook
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="." >JavaWeb实战项目</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
<div id="vip-container">
    <p><a id="1"></a></p>
<h3 id="&#x6574;&#x7406;&#x5B9E;&#x6218;javaweb&#x9879;&#x76EE;">&#x6574;&#x7406;&#x5B9E;&#x6218;JavaWeb&#x9879;&#x76EE;</h3>
<p><a id="2"></a></p>
<h4 id="&#x5FAE;&#x4EBA;&#x4E8B;&#x9879;&#x76EE;&#x5B9E;&#x6218;">&#x5FAE;&#x4EBA;&#x4E8B;&#x9879;&#x76EE;&#x5B9E;&#x6218;</h4>
<h6 id="&#x8981;&#x70B9;">&#x8981;&#x70B9;</h6>
<ul>
<li><p>&#x5FAE;&#x4EBA;&#x4E8B;&#x9879;&#x76EE;&#x4ECB;&#x7ECD;</p>
</li>
<li><p>&#x9879;&#x76EE;&#x6280;&#x672F;&#x67B6;&#x6784;</p>
</li>
<li><p>&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x9879;&#x76EE;&#x6784;&#x5EFA;</p>
</li>
<li><p>&#x767B;&#x5F55;&#x6A21;&#x5757;&#x5B9E;&#x73B0;</p>
</li>
<li><p>&#x52A8;&#x6001;&#x52A0;&#x8F7D;&#x7528;&#x6237;&#x83DC;&#x5355;</p>
</li>
<li><p>&#x90AE;&#x4EF6;&#x53D1;&#x9001;</p>
</li>
<li><p>&#x5458;&#x5DE5;&#x8D44;&#x6599;&#x5BFC;&#x5165;&#x5BFC;&#x51FA;</p>
</li>
<li><p>&#x5728;&#x7EBF;&#x804A;&#x5929;</p>
</li>
<li><p>&#x524D;&#x7AEF;&#x9879;&#x76EE;&#x6253;&#x5305;</p>
</li>
</ul>
<p>&#x672C;&#x7AE0;&#x5C06;&#x901A;&#x8FC7;&#x4E00;&#x4E2A;&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x9879;&#x76EE;&#x5E26;&#x8BFB;&#x8005;&#x638C;&#x63E1;&#x76EE;&#x524D;&#x6D41;&#x884C;&#x7684;Spring Boot+Vue&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x5F00;&#x53D1;&#x73AF;&#x5883;
&#x7684;&#x642D;&#x5EFA;&#x4EE5;&#x53CA;&#x9879;&#x76EE;&#x7684;&#x5F00;&#x53D1;&#x6D41;&#x7A0B;&#x3002;&#x672C;&#x7AE0;&#x91CD;&#x70B9;&#x5411;&#x8BFB;&#x8005;&#x4ECB;&#x7ECD;&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x73AF;&#x5883;&#x7684;&#x642D;&#x5EFA;&#x4EE5;&#x53CA;&#x5F00;&#x53D1;&#x6D41;&#x7A0B;&#xFF0C;&#x4E5F;&#x6D89;&#x53CA;&#x5C11;
&#x91CF;&#x7684;&#x4E1A;&#x52A1;&#x903B;&#x8F91;&#x3002;
&#x672C;&#x7AE0;&#x9879;&#x76EE;&#x7684;&#x5B8C;&#x6574;&#x4EE3;&#x7801;&#x53EF;&#x4EE5;&#x5728;GitHub&#x4E0A;&#x4E0B;&#x8F7D;&#xFF0C;&#x4E0B;&#x8F7D;&#x5730;&#x5740;&#x4E3A;<a href="https://github.com/lenve/vi" target="_blank">https://github.com/lenve/vi</a>,&#x672C;&#x7AE0;&#x5728;&#x5C55;&#x793A;&#x4EE3;&#x7801;&#x65F6;&#x4EC5;&#x5C55;&#x793A;&#x9879;&#x76EE;&#x5173;&#x952E;&#x6B65;&#x9AA4;&#x7684;&#x6838;&#x5FC3;&#x4EE3;&#x7801;&#x3002;</p>
<h4 id="&#x9879;&#x76EE;&#x7B80;&#x4ECB;">&#x9879;&#x76EE;&#x7B80;&#x4ECB;</h4>
<p>&#x4EBA;&#x4E8B;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#x662F;&#x4E00;&#x79CD;&#x5E38;&#x89C1;&#x7684;&#x4F01;&#x4E1A;&#x540E;&#x53F0;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#xFF0C;&#x5B83;&#x7684;&#x4E3B;&#x8981;&#x76EE;&#x7684;&#x662F;&#x52A0;&#x5F3A;&#x5404;&#x4E2A;&#x90E8;&#x95E8;&#x4E4B;&#x95F4;&#x7684;&#x534F;&#x8C03;&#x63D0;&#x9AD8;&#x5DE5;&#x4F5C;&#x6548;&#x7387;&#x3002;&#x4EBA;&#x4E8B;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#x63D0;&#x4F9B;&#x4E86;&#x5458;&#x5DE5;&#x8D44;&#x6599;&#x7BA1;&#x7406;&#x3001;&#x4EBA;&#x4E8B;&#x7BA1;&#x7406;&#x3001;&#x5DE5;&#x8D44;&#x7BA1;&#x7406;&#x3001;&#x7EDF;&#x8BA1;&#x7BA1;&#x7406;&#x4EE5;&#x53CA;&#x7CFB;&#x7EDF;&#x7BA1;&#x7406;&#x7B49;&#x529F;&#x80FD;&#xFF0C;&#x901A;&#x8FC7;&#x4EBA;&#x4E8B;&#x7BA1;&#x7406;&#x7EDF;&#xFF0C;&#x4EBA;&#x4E8B;&#x7EC4;&#x7EC7;&#x90E8;&#x95E8;&#x80FD;&#x505A;&#x5230;&#x4EE5;&#x4EBA;&#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x5404;&#x90E8;&#x95E8;&#x4E4B;&#x95F4;&#x5B9E;&#x73B0;&#x8D44;&#x6E90;&#x5171;&#x4EAB;&#xFF0C;&#x5E76;&#x4E14;&#x5B9E;&#x73B0;&#x5373;&#x65F6;&#x901A;&#x4FE1;&#xFF0C;&#x63D0;&#x9AD8;&#x5DE5;&#x4F5C;&#x6548;&#x7387;&#xFF0C;&#x7B80;&#x5316;&#x70E6;&#x7410;&#x7684;&#x624B;&#x5DE5;&#x7EDF;&#x8BA1;&#x3001;&#x4FE1;&#x606F;&#x6C47;&#x603B;&#x548C;&#x5DE5;&#x8D44;&#x4E1A;&#x52A1;&#x7B49;&#x5927;&#x91CF;&#x7684;&#x4EBA;&#x5DE5;&#x5DE5;&#x4F5C;&#xFF0C;&#x8BA9;&#x4EBA;&#x4E8B;&#x7EC4;&#x7EC7;&#x548C;&#x5DE5;&#x8D44;&#x7BA1;&#x7406;&#x5DE5;&#x4F5C;&#x5728;&#x4EBA;&#x4E8B;&#x7EC4;&#x7EC7;&#x76F8;&#x5173;&#x7684;&#x90E8;&#x95E8;&#x4E4B;&#x95F4;&#x6D3B;&#x8DC3;&#x8D77;&#x6765;&#x3002;</p>
<h4 id="&#x6280;&#x672F;&#x67B6;&#x6784;">&#x6280;&#x672F;&#x67B6;&#x6784;</h4>
<p>&#x672C;&#x9879;&#x76EE;&#x91C7;&#x7528;&#x5F53;&#x4E0B;&#x6D41;&#x884C;&#x7684;&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x7684;&#x65B9;&#x5F0F;&#x5F00;&#x53D1;&#xFF0C;&#x540E;&#x7AEF;&#x4F7F;&#x7528; Spring Boot&#x5F00;&#x53D1;&#xFF0C;&#x524D;&#x7AEF;&#x4F7F;&#x7528;Vue+ElementUI&#x6765;&#x6784;&#x5EFA;SPA.SPA &#x662F;&#x6307; Single-Page Application,&#x5373;&#x5355;&#x9875;&#x9762;&#x5E94;&#x7528;&#xFF0C;SPA&#x5E94;&#x7528;&#x901A;&#x8FC7;&#x52A8; &#x672C;&#x91CD;&#x5199;&#x5F53;&#x524D;&#x9875;&#x9762;&#x6765;&#x4E0E;&#x7528;&#x6237;&#x4EA4;&#x4E92;&#xFF0C;&#x800C;&#x975E;&#x4F20;&#x7EDF;&#x7684;&#x4ECE;&#x670D;&#x52A1;&#x5668;&#x91CD;&#x65B0;&#x52A0;&#x8F7D;&#x6574;&#x4E2A;&#x65B0;&#x9875;&#x9762;&#x3002;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x907F;&#x514D;&#x4E86;&#x9875;&#x9762;&#x4E4B;&#x95F4;&#x5207;&#x6362;&#x6253;&#x65AD;&#x7528;&#x6237;&#x4F53;&#x9A8C;&#xFF0C;&#x4F7F;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x66F4;&#x50CF;&#x4E00;&#x4E2A;&#x684C;&#x9762;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x3002;&#x5728;SPA&#x4E2D;&#xFF0C;&#x6240;&#x6709;&#x7684;HTML&#x3001;JavaScript&#x548C;CSS&#x90FD;&#x901A;&#x8FC7;&#x5355;&#x4E2A;&#x9875;&#x9762;&#x7684;&#x52A0;&#x8F7D;&#x6765;&#x68C0;&#x7D22;&#xFF0C;&#x6216;&#x8005;&#x6839;&#x636E;&#x7528;&#x6237;&#x64CD;&#x4F5C;&#x52A8;&#x6001;&#x88C5;&#x8F7D;&#x9002;&#x5F53;&#x7684;&#x8D44;&#x6E90;&#x5E76;&#x6DFB;&#x52A0;&#x5230;&#x9875;&#x9762;&#x3002;&#x5728;SPA&#x4E2D;&#xFF0C;&#x524D;&#x7AEF;&#x5C06;&#x901A;&#x8FC7;Ajax&#x4E0E;&#x540E;&#x7AEF;&#x901A;&#x4FE1;&#x3002;&#x5BF9;&#x4E8E;&#x5F00;&#x53D1;&#x8005;&#x800C;&#x8A00;&#xFF0C;SPA&#x6700;&#x76F4;&#x89C2;&#x7684;&#x611F;&#x53D7;&#x5C31;&#x662F;&#x9879;&#x76EE;&#x5F00;&#x53D1;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x53EA;&#x6709;&#x4E00;&#x4E2A; HTML&#x9875;&#x9762;&#xFF0C;&#x6240;&#x6709;&#x9875;&#x9762;&#x7684;&#x8DF3;&#x8F6C;&#x90FD;&#x901A;&#x8FC7;&#x8DEF;&#x7531;&#x8FDB;&#x884C;&#x5BFC;&#x822A;&#x3002;&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x7684;&#x53E6;&#x4E00;&#x4E2A;&#x597D;&#x5904;&#x662F;&#x4E00;&#x4E2A;&#x540E;&#x7AEF;&#x53EF;&#x4EE5;&#x5BF9;&#x5E94;&#x591A;&#x4E2A;&#x524D;&#x7AEF;&#xFF0C;&#x7531;&#x4E8E;&#x540E;&#x7AEF;&#x53EA;&#x8D1F;&#x8D23;&#x63D0;&#x4F9B;&#x6570;&#x636E;&#xFF0C;&#x524D;&#x540E;&#x7AEF;&#x7684;&#x4EA4;&#x4E92;&#x90FD;&#x662F;&#x901A;&#x8FC7;JSON&#x6570;&#x636E;&#x5B8C;&#x6210;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x540E;&#x7AEF;&#x5F00;&#x53D1;&#x6210;&#x529F;&#x540E;&#xFF0C;&#x524D;&#x7AEF;&#x53EF;&#x4EE5;&#x662F;PC&#x7AEF;&#x9875;&#x9762;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;Android&#x3001;iOS&#x4EE5;&#x53CA;&#x5FAE;&#x4FE1;&#x5C0F;&#x7A0B;&#x5E8F;&#x7B49;&#x3002;</p>
<h4 id="&#x7CFB;&#x7EDF;&#x8BBE;&#x8BA1;">&#x7CFB;&#x7EDF;&#x8BBE;&#x8BA1;</h4>
<p><img src="Sample Flowchart Template.jpg" alt="Sample Flowchart Template.jpg"></p>
<h6 id="vue&#x7B80;&#x4ECB;">Vue&#x7B80;&#x4ECB;</h6>
<p>Vue(&#x8BFB;&#x97F3;&#xFF0F;vju:/,&#x7C7B;&#x4F3C;&#x4E8E; view)&#x662F;&#x4E00;&#x5957;&#x7528;&#x4E8E;&#x6784;&#x5EFA;&#x7528;&#x6237;&#x754C;&#x9762;&#x7684;&#x6E10;&#x8FDB;&#x5F0F;&#x6846;&#x67B6;&#x3002;&#x4E0E;&#x5176;&#x4ED6;&#x5927;&#x578B;&#x6846;&#x67B6;&#x4E0D;&#x540C;&#x7684;&#x662F;&#xFF0C;Vue &#x88AB;&#x8BBE;&#x8BA1;&#x4E3A;&#x53EF;&#x4EE5;&#x81EA;&#x5E95;&#x5411;&#x4E0A;&#x9010;&#x5C42;&#x5E94;&#x7528;&#x3002;Vue &#x7684;&#x6838;&#x5FC3;&#x5E93;&#x53EA;&#x5173;&#x6CE8;&#x89C6;&#x56FE;&#x5C42;&#xFF0C;&#x4E0D;&#x4EC5;&#x6613;&#x4E8E;&#x4E0A;&#x624B;&#xFF0C;&#x8FD8;&#x4FBF;&#x4E8E;&#x4E0E;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;&#x6216;&#x65E2;&#x6709;&#x9879;&#x76EE;&#x6574;&#x5408;&#x3002;&#x53E6;&#x4E00;&#x65B9;&#x9762;&#xFF0C;&#x5F53;&#x4E0E;&#x73B0;&#x4EE3;&#x5316;&#x7684;&#x5DE5;&#x5177;&#x94FE;&#x4EE5;&#x53CA;&#x5404;&#x79CD;&#x652F;&#x6301;&#x7C7B;&#x5E93;&#x7ED3;&#x5408;&#x4F7F;&#x7528;&#x65F6;&#xFF0C;Vue &#x5B8C;&#x5168;&#x80FD;&#x591F;&#x4E3A;&#x590D;&#x6742;&#x7684;&#x5355;&#x9875;&#x5E94;&#x7528;&#x63D0;&#x4F9B;&#x9A71;&#x52A8;&#x3002;&#xFF0D;Vue &#x5B98;&#x7F51;</p>
<p>&#x5BF9;&#x4E8E;Vue&#x7684;&#x57FA;&#x7840;&#x77E5;&#x8BC6;&#xFF0C;&#x672C;&#x4E66;&#x4E0D;&#x505A;&#x8FC7;&#x591A;&#x4ECB;&#x7ECD;&#xFF0C;&#x7531;&#x4E8E;Vue&#x7684;&#x6587;&#x6863;&#x90FD;&#x662F;&#x4E2D;&#x6587;&#x6587;&#x6863;&#xFF0C;&#x56E0;&#x6B64;&#x5F3A;&#x70C8;&#x5EFA;&#x8BAE;&#x521D;&#x5B57;&#x8005;&#x901A;&#x8BFB;&#x5B98;&#x65B9;&#x6587;&#x6863;&#x6765;&#x4E86;&#x89E3;Vue &#x7684;&#x57FA;&#x672C;&#x4F7F;&#x7528;&#x65B9;&#x6CD5;&#xFF08;&#x5730;&#x5740;&#x4E3A; <a href="https://cn.vuejs.org/v2/guide/),&#x672C;&#x4E66;&#x540E;&#x9762;&#x5C06;&#x76F4;&#x63A5;&#x4ECB;&#x7ECD;Vue" target="_blank">https://cn.vuejs.org/v2/guide/),&#x672C;&#x4E66;&#x540E;&#x9762;&#x5C06;&#x76F4;&#x63A5;&#x4ECB;&#x7ECD;Vue</a> &#x5728;&#x9879;&#x76EE;&#x4E2D;&#x7684;&#x4F7F;&#x7528;&#x3002;</p>
<h6 id="element-&#x7B80;&#x4ECB;">Element &#x7B80;&#x4ECB;</h6>
<p>Vue &#x684C;&#x9762;&#x7AEF;&#x7EC4;&#x4EF6;&#x5E93;&#x975E;&#x5E38;&#x591A;&#xFF0C;&#x6BD4;&#x8F83;&#x6D41;&#x884C;&#x7684;&#x6709; Element&#x3001;Vux&#x3001;iView&#x3001;mint-ui&#x3001;muse-ui&#x7B49;&#xFF0C;&#x672C;&#x9879;&#x672F;&#x7528; Element &#x4F5C;&#x4E3A;&#x524D;&#x7AEF;&#x9875;&#x9762;&#x7EC4;&#x4EF6;&#x5E93;&#x3002;&#x8981;&#x8BF4;&#x8BBE;&#x8BA1;&#xFF0C;&#x8FD9;&#x4E9B;UI&#x5E93;&#x5DEE;&#x5F02;&#x90FD;&#x4E0D;&#x662F;&#x5F88;&#x5927;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x90FD;&#x662F;Materialcsign &#x98CE;&#x683C;&#x7684;&#xFF0C;&#x672C;&#x9879;&#x76EE;&#x91C7;&#x7528; Element &#x4E3B;&#x8981;&#x8003;&#x8651;&#x5230;&#x8BE5;&#x5E93;&#x7684;&#x4F7F;&#x7528;&#x4EBA;&#x6570;&#x8F83;&#x591A;&#xFF08;&#x622A;&#x81F3;&#x5199;&#x4F5C;&#x672C;&#x4E66;&#x65F6;&#xFF0C;Element&#x7684;GitHub&#x4E0A;&#x7684; star&#x6570;&#x5DF2;&#x8FBE; 29000,&#x63A5;&#x8FD1;30000),&#x51FA;&#x4E86;&#x95EE;&#x9898;&#x5BB9;&#x6613;&#x627E;&#x5230;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x3002;&#x5173;&#x4E8E;Element&#x7684;&#xFF0C;&#x5F3A;&#x70C8;&#x5EFA;&#x8BAE;&#x521D;&#x5B66;&#x8005;&#x901A;&#x8BFB;&#x5B98;&#x65B9;&#x6587;&#x6863;&#x5B66;&#x4E60;&#xFF08;&#x5730;&#x5740;&#x4E3A;<a href="http://element-cn.eleme.io/#/zh-CN/component" target="_blank">http://element-cn.eleme.io/#/zh-CN/component</a>). </p>
<h6 id="&#x5176;&#x4ED6;">&#x5176;&#x4ED6;</h6>
<p>&#x9664;&#x4E86;&#x524D;&#x7AEF;&#x6280;&#x672F;&#x70B9;&#x5916;&#xFF0C;&#x540E;&#x7AEF;&#x7528;&#x5230;&#x7684;&#x6280;&#x672F;&#x4E3B;&#x8981;&#x5C31;&#x662F;&#x7B2C;1~15 &#x7AE0;&#x63D0;&#x5230;&#x7684;&#x6280;&#x672F;&#xFF0C;&#x8FD9;&#x91CC;&#x5C31;&#x4E0D;&#x8BE6;&#x7EC6;&#x5C55;&#x5F00;&#x4E86;
&#x7AE0;</p>
<h4 id="&#x9879;&#x76EE;&#x6784;&#x5EFA;">&#x9879;&#x76EE;&#x6784;&#x5EFA;</h4>
<h6 id="&#x524D;&#x7AEF;&#x9879;&#x76EE;&#x6784;&#x5EFA;">&#x524D;&#x7AEF;&#x9879;&#x76EE;&#x6784;&#x5EFA;</h6>
<p>Vue &#x9879;&#x76EE;&#x4F7F;&#x7528; webpack &#x6765;&#x6784;&#x5EFA;&#x3002;&#x9996;&#x5148;&#x786E;&#x4FDD;&#x672C;&#x5730;&#x5DF2;&#x7ECF;&#x5B89;&#x88C5;&#x4E86; NodeJS,&#x7136;&#x540E;&#x5728;CMD&#x4E2D;&#x6267;&#x884C;&#x5982;&#x4E0B;
&#x4EE4;&#xFF0C;&#x53EF;&#x4EE5;&#x521B;&#x5EFA;&#x5E76;&#x542F;&#x52A8;&#x4E00;&#x4E2A;&#x540D;&#x4E3A;vuehr&#x7684;&#x524D;&#x7AEF;&#x9879;&#x76EE;&#xFF1A;</p>
<pre class="language-"><code>npm install -g vue-cli
vue init webpack vuehr
cd vuehr
npm run dev
</code></pre><p>&#x5728;&#x6267;&#x884C;&#x201C;vue init webpack vuehr&#x201D;&#x547D;&#x4EE4;&#x65F6;&#xFF0C;&#x4F1A;&#x8981;&#x6C42;&#x4F9D;&#x6B21;&#x8F93;&#x5165;&#x9879;&#x76EE;&#x7684;&#x57FA;&#x672C;&#x4FE1;&#x606F;&#xFF0C;&#x5982;&#x56FE;16-1&#x6240;&#x793A;&#x3002;</p>
<pre class="language-"><code>Project name vuehr
Project description A Vue.js project
Author &#x6C5F;&#x5357;&#x4E00;&#x70B9;&#x96E8;
&lt;wangsong0210@gmail.com
Vue build standalone
Install vue-router?ies
Use ESLint to lint your code?No
Set up unit tests No
Setup e2e tests with Nightwatch?No
Should we run npm install for you after the project has been created?(recommended)nom 
vue-cli
Generated vuehr&quot;.
</code></pre><h4 id="&#x57FA;&#x672C;&#x4FE1;&#x606F;&#x4E3B;&#x8981;&#x5305;&#x62EC;&#xFF1A;">&#x57FA;&#x672C;&#x4FE1;&#x606F;&#x4E3B;&#x8981;&#x5305;&#x62EC;&#xFF1A;</h4>
<ul>
<li><p>&#x9879;&#x76EE;&#x540D;&#x79F0;&#x3002;</p>
</li>
<li><p>&#x9879;&#x76EE;&#x63CF;&#x8FF0;&#x3002;</p>
</li>
<li><p>&#x9879;&#x76EE;&#x4F5C;&#x8005;&#x3002;</p>
</li>
<li><p>Vue &#x9879;&#x76EE;&#x6784;&#x5EFA;&#xFF1A;&#x8FD0;&#x884C;&#xFF0B;&#x7F16;&#x8BD1;&#x8FD8;&#x662F;&#x4EC5;&#x8FD0;&#x884C;&#x3002;</p>
</li>
<li><p>&#x662F;&#x5426;&#x5B89;&#x88C5; vue-router.</p>
</li>
<li><p>&#x662F;&#x5426;&#x4F7F;&#x7528; ESLint.</p>
</li>
<li><p>&#x662F;&#x5426;&#x4F7F;&#x7528;&#x5355;&#x5143;&#x6D4B;&#x8BD5;&#x3002;</p>
</li>
<li><p>&#x662F;&#x5426;&#x9002;&#x7528; Nightwatch e2e &#x6D4B;&#x8BD5;&#x3002;</p>
</li>
<li><p>&#x662F;&#x5426;&#x5728;&#x9879;&#x76EE;&#x521B;&#x5EFA;&#x6210;&#x529F;&#x540E;&#x81EA;&#x52A8;&#x6267;&#x884C;&#x201C;npm install&#x201D;&#x5B89;&#x88C5;&#x4F9D;&#x8D56;&#xFF0C;&#x82E5;&#x9009;&#x62E9;&#x5426;&#xFF0C;&#x5219;&#x5728;&#x7B2C;4&#x884C;&#x547D;&#x4EE4;&#x6267;&#x884C;&#x4E4B;
&#x524D;&#x6267;&#x884C;&#x201C;npm install&#x201D;&#x3002;</p>
</li>
</ul>
<p>&#x5F53;&#x201C;npm run dev&#x201D;&#x547D;&#x4EE4;&#x6267;&#x884C;&#x4E4B;&#x540E;&#xFF0C;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#x8F93;&#x5165; <a href="http://localhost:8080,&#x663E;&#x793A;&#x9875;&#x9762;" target="_blank">http://localhost:8080,&#x663E;&#x793A;&#x9875;&#x9762;</a></p>
<h4 id="&#x540E;&#x7AEF;&#x9879;&#x76EE;&#x6784;&#x5EFA;">&#x540E;&#x7AEF;&#x9879;&#x76EE;&#x6784;&#x5EFA;</h4>
<p>&#x540E;&#x7AEF;&#x4F7F;&#x7528; Spring Boot &#x521B;&#x5EFA;&#x4E00;&#x4E2A; Spring Boot&#x5DE5;&#x7A0B;&#xFF0C;&#x6DFB;&#x52A0; spring-boot-starter-web &#x4F9D;&#x8D56;&#x5373;&#x53EF;&#xFF1A;</p>
<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> 
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-web<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>&#xFF0F;dependency</span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>&#x5F53;&#x7136;&#xFF0C;&#x540E;&#x7AEF;&#x6240;&#x9700;&#x7684;&#x4F9D;&#x8D56;&#x4E0D;&#x6B62;spring-boot-starter-web,&#x5728;&#x540E;&#x6587;&#x529F;&#x80FD;&#x4E0D;&#x65AD;&#x5B8C;&#x5584;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x518D;&#x7EE7;&#x7EED;&#x9F0E;&#x5177;&#x4ED6;&#x4F9D;&#x8D56;&#x3002;&#x53E6;&#x5916;&#xFF0C;&#x540E;&#x7AEF;&#x9879;&#x76EE;&#x6240;&#x9700;&#x7684;Redis &#x914D;&#x7F6E;&#x3001;&#x90AE;&#x4EF6;&#x53D1;&#x9001;&#x914D;&#x7F6E;&#x3001;POI&#x914D;&#x7F6E;&#x3001;WebSocket&#x914D;&#x7F6E;&#x7B49;&#x5C06;&#x5728;&#x6D89;&#x53CA;&#x76F8;&#x5173;&#x529F;&#x80FD;&#x65F6;&#x5411;&#x8BFB;&#x8005;&#x4ECB;&#x7ECD;&#x3002;</p>
<h4 id="&#x6570;&#x636E;&#x6A21;&#x578B;&#x8BBE;&#x8BA1;">&#x6570;&#x636E;&#x6A21;&#x578B;&#x8BBE;&#x8BA1;</h4>
<p><img src="employee.jpg" alt="employee.jpg"></p>
<p>&#x5B8C;&#x6574;&#x7684;&#x6570;&#x636E;&#x5E93;&#x811A;&#x672C;&#x53EF;&#x4EE5;&#x5728; GitHub &#x4E0A;&#x4E0B;&#x8F7D;&#xFF0C;&#x4E0B;&#x8F7D;&#x5730;&#x5740;&#x4E3A;<a href="https://github.com/lenve/vhr/blob/master/hrserver/src/main/resources/vhr.sql" target="_blank">https://github.com/lenve/vhr/blob/master/hrserver/src/main/resources/vhr.sql</a>,&#x8FD9;&#x91CC;&#x4EC5;&#x5C55;&#x793A;&#x672C;&#x9879;&#x76EE;&#x7684;&#x6570;&#x636E;&#x5B57;&#x5178;&#x3002;</p>
<p>adjustsalary&#x8868;&#xFF08;&#x5458;&#x5DE5;&#x8C03;&#x85AA;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5B57;&#x6BB5;&#x540D;</th>
<th>&#x903B;&#x8F91;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x7EA6;&#x675F;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td></td>
<td>Integer</td>
<td>&#x4E3B;&#x952E;&#xFF0C;&#x81EA;&#x589E;&#x957F;</td>
<td>&#x4E3B;&#x952E;</td>
</tr>
<tr>
<td>eid</td>
<td></td>
<td>Integer</td>
<td>&#x5916;&#x952E;&#xFF0C;&#x666E;&#x901A;&#x7D22;&#x5F15;</td>
<td>&#x5458;&#x5DE5;id</td>
</tr>
<tr>
<td>asDate</td>
<td></td>
<td>Date</td>
<td></td>
<td>&#x8C03;&#x85AA;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>beforeSalary</td>
<td></td>
<td>Integer</td>
<td></td>
<td>&#x8C03;&#x524D;&#x85AA;&#x8D44;</td>
</tr>
<tr>
<td>afterSalary</td>
<td></td>
<td>Integer</td>
<td></td>
<td>&#x8C03;&#x540E;&#x85AA;&#x8D44;</td>
</tr>
<tr>
<td>reason</td>
<td></td>
<td>String(255)</td>
<td></td>
<td>&#x8C03;&#x85AA;&#x539F;&#x56E0;</td>
</tr>
<tr>
<td>remark</td>
<td></td>
<td>String(255)</td>
<td></td>
<td>&#x5907;&#x6CE8;</td>
</tr>
</tbody>
</table>
<p>appraise&#x8868;&#xFF08;&#x5458;&#x5DE5;&#x8BC4;&#x4EF7;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5B57;&#x6BB5;&#x540D;</th>
<th>&#x903B;&#x8F91;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x7EA6;&#x675F;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td></td>
<td>Integer</td>
<td>&#x4E3B;&#x952E;&#xFF0C;&#x81EA;&#x589E;&#x957F;</td>
<td>&#x4E3B;&#x952E;</td>
</tr>
<tr>
<td>eid</td>
<td></td>
<td>Integer</td>
<td>&#x5916;&#x952E;&#xFF0C;&#x666E;&#x901A;&#x7D22;&#x5F15;</td>
<td>&#x5458;&#x5DE5;id</td>
</tr>
<tr>
<td>appDate</td>
<td></td>
<td>Date</td>
<td></td>
<td>&#x8003;&#x8BC4;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>appResult</td>
<td></td>
<td>String(255)</td>
<td></td>
<td>&#x8003;&#x8BC4;&#x7ED3;&#x679C;</td>
</tr>
<tr>
<td>appContent</td>
<td></td>
<td>String(255)</td>
<td></td>
<td>&#x8003;&#x8BC4;&#x5185;&#x5BB9;</td>
</tr>
<tr>
<td>remark</td>
<td></td>
<td>String(255)</td>
<td></td>
<td>&#x5907;&#x6CE8;</td>
</tr>
</tbody>
</table>
<p>department&#x8868;&#xFF08;&#x90E8;&#x95E8;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5B57;&#x6BB5;&#x540D;</th>
<th>&#x903B;&#x8F91;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x7EA6;&#x675F;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td></td>
<td>Integer</td>
<td>&#x4E3B;&#x952E;&#xFF0C;&#x81EA;&#x589E;&#x957F;</td>
<td>&#x4E3B;&#x952E;</td>
</tr>
<tr>
<td>name</td>
<td></td>
<td>String(32)</td>
<td></td>
<td>&#x90E8;&#x95E8;&#x540D;&#x79F0;</td>
</tr>
<tr>
<td>parentId</td>
<td></td>
<td>Date</td>
<td></td>
<td>&#x7236;&#x90E8;&#x95E8;id</td>
</tr>
<tr>
<td>depPath</td>
<td></td>
<td>String(255)</td>
<td></td>
<td>&#x90E8;&#x95E8;path</td>
</tr>
<tr>
<td>enabled</td>
<td></td>
<td>Enum</td>
<td></td>
<td>&#x662F;&#x5426;&#x53EF;&#x7528;</td>
</tr>
<tr>
<td>isParent</td>
<td></td>
<td>Enum</td>
<td></td>
<td>&#x662F;&#x5426;&#x4E3A;&#x7236;&#x90E8;&#x95E8;</td>
</tr>
</tbody>
</table>
<p>employee&#x8868;&#xFF08;&#x5458;&#x5DE5;&#x4FE1;&#x606F;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>address</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
<td>&#x8054;&#x7CFB;&#x5730;&#x5740;</td>
</tr>
<tr>
<td>beginContract</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5408;&#x540C;&#x8D77;&#x59CB;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>beginDate</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5165;&#x804C;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>birthday</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x51FA;&#x751F;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>contractTerm</td>
<td>double</td>
<td>double</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5408;&#x540C;&#x671F;&#x9650;</td>
</tr>
<tr>
<td>conversionTime</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x8F6C;&#x6B63;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>departmentId</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x6240;&#x5C5E;&#x90E8;&#x95E8;</td>
</tr>
<tr>
<td>email</td>
<td>varchar(20)</td>
<td>varchar</td>
<td>20</td>
<td>YES</td>
<td></td>
<td>&#x90AE;&#x7BB1;</td>
</tr>
<tr>
<td>endContract</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5408;&#x540C;&#x7EC8;&#x6B62;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>engageForm</td>
<td>varchar(8)</td>
<td>varchar</td>
<td>8</td>
<td>YES</td>
<td></td>
<td>&#x8058;&#x7528;&#x5F62;&#x5F0F;</td>
</tr>
<tr>
<td>gender</td>
<td>char(4)</td>
<td>char</td>
<td>4</td>
<td>YES</td>
<td></td>
<td>&#x6027;&#x522B;</td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td>&#x5458;&#x5DE5;&#x7F16;&#x53F7;</td>
</tr>
<tr>
<td>idCard</td>
<td>char(18)</td>
<td>char</td>
<td>18</td>
<td>YES</td>
<td></td>
<td>&#x8EAB;&#x4EFD;&#x8BC1;&#x53F7;</td>
</tr>
<tr>
<td>jobLevelId</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x804C;&#x79F0;ID</td>
</tr>
<tr>
<td>name</td>
<td>varchar(10)</td>
<td>varchar</td>
<td>10</td>
<td>YES</td>
<td></td>
<td>&#x5458;&#x5DE5;&#x59D3;&#x540D;</td>
</tr>
<tr>
<td>nationId</td>
<td>int(8)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x6C11;&#x65CF;</td>
</tr>
<tr>
<td>nativePlace</td>
<td>varchar(20)</td>
<td>varchar</td>
<td>20</td>
<td>YES</td>
<td></td>
<td>&#x7C4D;&#x8D2F;</td>
</tr>
<tr>
<td>notWorkDate</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x79BB;&#x804C;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>phone</td>
<td>varchar(11)</td>
<td>varchar</td>
<td>11</td>
<td>YES</td>
<td></td>
<td>&#x7535;&#x8BDD;&#x53F7;&#x7801;</td>
</tr>
<tr>
<td>politicId</td>
<td>int(8)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x653F;&#x6CBB;&#x9762;&#x8C8C;</td>
</tr>
<tr>
<td>posId</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x804C;&#x4F4D;ID</td>
</tr>
<tr>
<td>school</td>
<td>varchar(32)</td>
<td>varchar</td>
<td>32</td>
<td>YES</td>
<td></td>
<td>&#x6BD5;&#x4E1A;&#x9662;&#x6821;</td>
</tr>
<tr>
<td>specialty</td>
<td>varchar(32)</td>
<td>varchar</td>
<td>32</td>
<td>YES</td>
<td></td>
<td>&#x6240;&#x5C5E;&#x4E13;&#x4E1A;</td>
</tr>
<tr>
<td>tiptopDegree</td>
<td>enum(&apos;&#x535A;&#x58EB;&apos;,&apos;&#x7855;&#x58EB;&apos;,&apos;&#x672C;&#x79D1;&apos;,&apos;&#x5927;&#x4E13;&apos;,&apos;&#x9AD8;&#x4E2D;&apos;,&apos;&#x521D;&#x4E2D;&apos;,&apos;&#x5C0F;&#x5B66;&apos;,&apos;&#x5176;&#x4ED6;&apos;)</td>
<td>enum</td>
<td>2</td>
<td>YES</td>
<td></td>
<td>&#x6700;&#x9AD8;&#x5B66;&#x5386;</td>
</tr>
<tr>
<td>wedlock</td>
<td>enum(&apos;&#x5DF2;&#x5A5A;&apos;,&apos;&#x672A;&#x5A5A;&apos;,&apos;&#x79BB;&#x5F02;&apos;)</td>
<td>enum</td>
<td>2</td>
<td>YES</td>
<td></td>
<td>&#x5A5A;&#x59FB;&#x72B6;&#x51B5;</td>
</tr>
<tr>
<td>workAge</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5DE5;&#x9F84;</td>
</tr>
<tr>
<td>workID</td>
<td>char(8)</td>
<td>char</td>
<td>8</td>
<td>YES</td>
<td></td>
<td>&#x5DE5;&#x53F7;</td>
</tr>
<tr>
<td>workState</td>
<td>enum(&apos;&#x5728;&#x804C;&apos;,&apos;&#x79BB;&#x804C;&apos;)</td>
<td>enum</td>
<td>2</td>
<td>YES</td>
<td>&#x5728;&#x804C;</td>
<td>&#x5728;&#x804C;&#x72B6;&#x6001;</td>
</tr>
</tbody>
</table>
<p>employeeec&#x8868;&#xFF08;&#x5458;&#x5DE5;&#x5956;&#x52B1;&#x60E9;&#x7F5A;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>ecDate</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5956;&#x7F5A;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>ecPoint</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5956;&#x7F5A;&#x5206;</td>
</tr>
<tr>
<td>ecReason</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td>&#x5956;&#x7F5A;&#x539F;&#x56E0;</td>
</tr>
<tr>
<td>ecType</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5956;&#x7F5A;&#x7C7B;&#x522B;&#xFF0C;0&#xFF1A;&#x5956;&#xFF0C;1&#xFF1A;&#x7F5A;</td>
</tr>
<tr>
<td>eid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5458;&#x5DE5;&#x7F16;&#x53F7;</td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>remark</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td>&#x5907;&#x6CE8;</td>
</tr>
</tbody>
</table>
<p>employeeremove&#x8868;&#xFF08;&#x5458;&#x5DE5;&#x8C03;&#x5C97;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>afterDepId</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x8C03;&#x52A8;&#x540E;&#x90E8;&#x95E8;</td>
</tr>
<tr>
<td>afterJobId</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x8C03;&#x52A8;&#x540E;&#x804C;&#x4F4D;</td>
</tr>
<tr>
<td>eid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>reason</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td>&#x8C03;&#x52A8;&#x539F;&#x56E0;</td>
</tr>
<tr>
<td>remark</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>removeDate</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x8C03;&#x52A8;&#x65E5;&#x671F;</td>
</tr>
</tbody>
</table>
<p>employeetrain&#x8868;&#xFF08;&#x5458;&#x5DE5;&#x57F9;&#x8BAD;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>eid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5458;&#x5DE5;&#x7F16;&#x53F7;</td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>remark</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td>&#x5907;&#x6CE8;</td>
</tr>
<tr>
<td>trainContent</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td>&#x57F9;&#x8BAD;&#x5185;&#x5BB9;</td>
</tr>
<tr>
<td>trainDate</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x57F9;&#x8BAD;&#x65E5;&#x671F;</td>
</tr>
</tbody>
</table>
<p>empsalary&#x8868;&#xFF08;&#x5458;&#x5DE5;&#x85AA;&#x8D44;&#x5173;&#x8054;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>eid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>sid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
</tr>
</tbody>
</table>
<p>hr&#x8868;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>address</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
<td>&#x8054;&#x7CFB;&#x5730;&#x5740;</td>
</tr>
<tr>
<td>enabled</td>
<td>tinyint(1)</td>
<td>tinyint</td>
<td></td>
<td>YES</td>
<td>1</td>
<td></td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td>hrID</td>
</tr>
<tr>
<td>name</td>
<td>varchar(32)</td>
<td>varchar</td>
<td>32</td>
<td>YES</td>
<td></td>
<td>&#x59D3;&#x540D;</td>
</tr>
<tr>
<td>password</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td>&#x5BC6;&#x7801;</td>
</tr>
<tr>
<td>phone</td>
<td>char(11)</td>
<td>char</td>
<td>11</td>
<td>YES</td>
<td></td>
<td>&#x624B;&#x673A;&#x53F7;&#x7801;</td>
</tr>
<tr>
<td>remark</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>telephone</td>
<td>varchar(16)</td>
<td>varchar</td>
<td>16</td>
<td>YES</td>
<td></td>
<td>&#x4F4F;&#x5B85;&#x7535;&#x8BDD;</td>
</tr>
<tr>
<td>userface</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>username</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td>&#x7528;&#x6237;&#x540D;</td>
</tr>
</tbody>
</table>
<p>hr_role&#x8868;&#xFF08;hr&#x89D2;&#x8272;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>hrid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>rid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
</tr>
</tbody>
</table>
<p>joblevel&#x8868;&#xFF08;&#x804C;&#x79F0;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>createDate</td>
<td>timestamp</td>
<td>timestamp</td>
<td></td>
<td>YES</td>
<td>CURRENT_TIMESTAMP</td>
<td></td>
</tr>
<tr>
<td>enabled</td>
<td>tinyint(1)</td>
<td>tinyint</td>
<td></td>
<td>YES</td>
<td>1</td>
<td></td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>name</td>
<td>varchar(32)</td>
<td>varchar</td>
<td>32</td>
<td>YES</td>
<td></td>
<td>&#x804C;&#x79F0;&#x540D;&#x79F0;</td>
</tr>
<tr>
<td>titleLevel</td>
<td>enum(&apos;&#x6B63;&#x9AD8;&#x7EA7;&apos;,&apos;&#x526F;&#x9AD8;&#x7EA7;&apos;,&apos;&#x4E2D;&#x7EA7;&apos;,&apos;&#x521D;&#x7EA7;&apos;,&apos;&#x5458;&#x7EA7;&apos;)</td>
<td>enum</td>
<td>3</td>
<td>YES</td>
<td></td>
</tr>
</tbody>
</table>
<p>menu&#x8868;&#xFF08;&#x83DC;&#x5355;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>component</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>enabled</td>
<td>tinyint(1)</td>
<td>tinyint</td>
<td></td>
<td>YES</td>
<td>1</td>
<td></td>
</tr>
<tr>
<td>iconCls</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>keepAlive</td>
<td>tinyint(1)</td>
<td>tinyint</td>
<td></td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>name</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>parentId</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>path</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>requireAuth</td>
<td>tinyint(1)</td>
<td>tinyint</td>
<td></td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>url</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
</tr>
</tbody>
</table>
<p>menu_role&#x8868;&#xFF08;&#x83DC;&#x5355;&#x89D2;&#x8272;&#x5173;&#x8054;&#x8868;&#xFF09;
| &#x5217;&#x540D; | &#x6570;&#x636E;&#x7C7B;&#x578B; | &#x5B57;&#x6BB5;&#x7C7B;&#x578B; | &#x957F;&#x5EA6; | &#x662F;&#x5426;&#x4E3A;&#x7A7A; | &#x9ED8;&#x8BA4;&#x503C; | &#x5907;&#x6CE8; |
| ---- | -------- | -------- | ---- | -------- | ------ | ---- |
| id   | int(11)  | int      |      | NO       |        |      |
| mid  | int(11)  | int      |      | YES      |        |      |
| rid  | int(11)  | int      |      | YES      |        |      |</p>
<p>msgcontent&#x8868;&#xFF08;&#x6D88;&#x606F;&#x5185;&#x5BB9;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>createDate</td>
<td>timestamp</td>
<td>timestamp</td>
<td></td>
<td>NO</td>
<td>CURRENT_TIMESTAMP</td>
<td></td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>message</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>title</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
</tr>
</tbody>
</table>
<p>nation&#x8868;&#xFF08;&#x6C11;&#x65CF;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>name</td>
<td>varchar(32)</td>
<td>varchar</td>
<td>32</td>
<td>YES</td>
<td></td>
</tr>
</tbody>
</table>
<p>oplog&#x8868;&#xFF08;&#x64CD;&#x4F5C;&#x65E5;&#x5FD7;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>addDate</td>
<td>date</td>
<td>date</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x6DFB;&#x52A0;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>hrid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x64CD;&#x4F5C;&#x5458;ID</td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>operate</td>
<td>varchar(255)</td>
<td>varchar</td>
<td>255</td>
<td>YES</td>
<td></td>
<td>&#x64CD;&#x4F5C;&#x5185;&#x5BB9;</td>
</tr>
</tbody>
</table>
<p>politicsstatus&#x8868;&#xFF08;&#x653F;&#x6CBB;&#x9762;&#x8C8C;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>name</td>
<td>varchar(32)</td>
<td>varchar</td>
<td>32</td>
<td>YES</td>
<td></td>
</tr>
</tbody>
</table>
<p>position&#x8868;( &#x804C;&#x4F4D;&#x8868;)</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>createDate</td>
<td>timestamp</td>
<td>timestamp</td>
<td></td>
<td>YES</td>
<td>CURRENT_TIMESTAMP</td>
<td></td>
</tr>
<tr>
<td>enabled</td>
<td>tinyint(1)</td>
<td>tinyint</td>
<td></td>
<td>YES</td>
<td>1</td>
<td></td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>name</td>
<td>varchar(32)</td>
<td>varchar</td>
<td>32</td>
<td>YES</td>
<td></td>
<td>&#x804C;&#x4F4D;</td>
</tr>
</tbody>
</table>
<p>role&#x8868;&#xFF08;&#x89D2;&#x8272;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>name</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>nameZh</td>
<td>varchar(64)</td>
<td>varchar</td>
<td>64</td>
<td>YES</td>
<td></td>
<td>&#x89D2;&#x8272;&#x540D;&#x79F0;</td>
</tr>
</tbody>
</table>
<p>salary&#x8868;&#xFF08;&#x85AA;&#x6C34;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>accumulationFundBase</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x516C;&#x79EF;&#x91D1;&#x57FA;&#x6570;</td>
</tr>
<tr>
<td>accumulationFundPer</td>
<td>float</td>
<td>float</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x516C;&#x79EF;&#x91D1;&#x6BD4;&#x7387;</td>
</tr>
<tr>
<td>allSalary</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5E94;&#x53D1;&#x5DE5;&#x8D44;</td>
</tr>
<tr>
<td>basicSalary</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x57FA;&#x672C;&#x5DE5;&#x8D44;</td>
</tr>
<tr>
<td>bonus</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5956;&#x91D1;</td>
</tr>
<tr>
<td>createDate</td>
<td>timestamp</td>
<td>timestamp</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x542F;&#x7528;&#x65F6;&#x95F4;</td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>lunchSalary</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x5348;&#x9910;&#x8865;&#x52A9;</td>
</tr>
<tr>
<td>medicalBase</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x533B;&#x7597;&#x57FA;&#x6570;</td>
</tr>
<tr>
<td>medicalPer</td>
<td>float</td>
<td>float</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x533B;&#x7597;&#x4FDD;&#x9669;&#x6BD4;&#x7387;</td>
</tr>
<tr>
<td>name</td>
<td>varchar(32)</td>
<td>varchar</td>
<td>32</td>
<td>YES</td>
<td></td>
<td></td>
</tr>
<tr>
<td>pensionBase</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x517B;&#x8001;&#x91D1;&#x57FA;&#x6570;</td>
</tr>
<tr>
<td>pensionPer</td>
<td>float</td>
<td>float</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x517B;&#x8001;&#x91D1;&#x6BD4;&#x7387;</td>
</tr>
<tr>
<td>trafficSalary</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x4EA4;&#x901A;&#x8865;&#x52A9;</td>
</tr>
</tbody>
</table>
<p>sysmsg&#x8868;&#xFF08;&#x7CFB;&#x7EDF;&#x6D88;&#x606F;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>hrid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x8FD9;&#x6761;&#x6D88;&#x606F;&#x662F;&#x7ED9;&#x8C01;&#x7684;</td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>mid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x6D88;&#x606F;id</td>
</tr>
<tr>
<td>state</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td>0</td>
<td>0 &#x672A;&#x8BFB; 1 &#x5DF2;&#x8BFB;</td>
</tr>
<tr>
<td>type</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td>0</td>
<td>0&#x8868;&#x793A;&#x7FA4;&#x53D1;&#x6D88;&#x606F;</td>
</tr>
</tbody>
</table>
<p>mail_send_log&#x8868;&#xFF08;&#x90AE;&#x4EF6;&#x53D1;&#x9001;&#x65E5;&#x5FD7;&#x8868;&#xFF09;</p>
<table>
<thead>
<tr>
<th>&#x5217;&#x540D;</th>
<th>&#x6570;&#x636E;&#x7C7B;&#x578B;</th>
<th>&#x5B57;&#x6BB5;&#x7C7B;&#x578B;</th>
<th>&#x957F;&#x5EA6;</th>
<th>&#x662F;&#x5426;&#x4E3A;&#x7A7A;</th>
<th>&#x9ED8;&#x8BA4;&#x503C;</th>
<th>&#x5907;&#x6CE8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>hrid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x8FD9;&#x6761;&#x6D88;&#x606F;&#x662F;&#x7ED9;&#x8C01;&#x7684;</td>
</tr>
<tr>
<td>id</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>NO</td>
<td></td>
<td></td>
</tr>
<tr>
<td>mid</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td></td>
<td>&#x6D88;&#x606F;id</td>
</tr>
<tr>
<td>state</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td>0</td>
<td>0 &#x672A;&#x8BFB; 1 &#x5DF2;&#x8BFB;</td>
</tr>
<tr>
<td>type</td>
<td>int(11)</td>
<td>int</td>
<td></td>
<td>YES</td>
<td>0</td>
<td>0&#x8868;&#x793A;&#x7FA4;&#x53D1;&#x6D88;&#x606F;</td>
</tr>
</tbody>
</table>
<p>&#x7ECF;&#x8FC7;&#x4EE5;&#x4E0A;&#x51C6;&#x5907;&#x5DE5;&#x4F5C;&#xFF0C;&#x9879;&#x76EE;&#x73AF;&#x5883;&#x5C31;&#x5DF2;&#x7ECF;&#x57FA;&#x672C;&#x642D;&#x5EFA;&#x6210;&#x529F;&#x4E86;&#x3002;&#x53E6;&#x5916;&#xFF0C;&#x5BF9;&#x4E8E;Redis&#x7684;&#x5B89;&#x88C5;&#x3001;&#x542F;&#x52A8;&#x7B49;&#xFF0C;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x53C2;&#x8003;&#x7B2C;6&#x7AE0;&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x3002;</p>
<h3 id="&#x767B;&#x5F55;&#x6A21;&#x5757;">&#x767B;&#x5F55;&#x6A21;&#x5757;</h3>
<h4 id="&#x540E;&#x7AEF;&#x63A5;&#x53E3;&#x5B9E;&#x73B0;">&#x540E;&#x7AEF;&#x63A5;&#x53E3;&#x5B9E;&#x73B0;</h4>
<p>&#x540E;&#x7AEF;&#x6743;&#x9650;&#x8BA4;&#x8BC1;&#x91C7;&#x7528; Spring Security &#x5B9E;&#x73B0;&#xFF08;&#x672C;&#x5C0F;&#x8282;&#x4E2D;&#x5927;&#x91CF;&#x77E5;&#x8BC6;&#x70B9;&#x4E0E;&#x7B2C;10&#x7AE0;&#x7684;&#x5185;&#x5BB9;&#x76F8;&#x5173;&#xFF0C;&#x9700;&#x8981;&#x8BFB;&#x7EC3;&#x4EAB;&#x63E1;&#x7B2C;10&#x7AE0;&#x7684;&#x5185;&#x5BB9;&#xFF09;&#xFF0C;&#x6570;&#x636E;&#x5E93;&#x8BBF;&#x95EE;&#x4F7F;&#x7528;MyBatis,&#x540C;&#x65F6;&#x4F7F;&#x7528;Redis&#x5B9E;&#x73B0;&#x8BA4;&#x8BC1;&#x4FE1;&#x606F;&#x7F13;&#x5B58;&#x3002;&#x56E0;&#x6B64;&#x53EB;&#x81EA;&#x5149;&#x6DFB;&#x52A0;&#x5982;&#x4E0B;&#x4F9D;&#x8D56;&#xFF08;&#x4F9D;&#x6B21;&#x662F;MvBatis &#x4F9D;&#x8D56;&#x3001;Spring Security &#x4F9D;&#x8D56;&#x3001;Redis &#x4F9D;&#x8D56;&#x3001;&#x6570;&#x636E;&#x5E93;&#x8FDE;&#x63A5;&#x6C60;&#x4F9D;&#x8D56;&#x3001;&#x6570;&#x636E;&#x5E93;&#x9A71;&#x52A8;&#x4F9D;&#x8D56;&#x4EE5;&#x53CA;&#x7F13;&#x5B58;&#x4F9D;&#x8D56;&#xFF09;</p>
<pre class="language-"><code class="lang-xml"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupid</span><span class="token punctuation">&gt;</span></span>org.mybatis.spring.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupld</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactld</span><span class="token punctuation">&gt;</span></span>&gt;mvbatis-spring-boot-starter<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactld</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.3.2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-security<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>&#xFF0F;dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-data-redis<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusions</span><span class="token punctuation">&gt;</span></span>
                  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusion</span><span class="token punctuation">&gt;</span></span>
                     <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>io.lettuce<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
                     <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>lettuce-core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
                   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusion</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusions</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>redis.clients<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>jedis<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.alibaba<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>druid<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.1.10<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>mysql<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>mysql-connector-java<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-cache<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>&#x4F9D;&#x8D56;&#x6DFB;&#x52A0;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x5728; application.properties &#x4E2D;&#x914D;&#x7F6E;&#x6570;&#x636E;&#x5E93;&#x8FDE;&#x63A5;&#x3001;Redis&#x8FDE;&#x63A5;&#x4EE5;&#x53CA;&#x7F13;&#x5B58;&#x7B49;&#x3002;</p>
<pre class="language-"><code class="lang-yml">&#xFF03;MySQL&#x914D;&#x7F6E;
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/vhr
spring.datasource.username=root
spring.datasource.password=root
&#xFF03;MyBatis&#x65E5;&#x5FD7;&#x914D;&#x7F6E;
mybatis.config-location=classpath:/mybatis-config.xml
&#xFF03;Redis&#x914D;&#x7F6E;
spring.redis.database=0
spring.redis.host=192.168.66.130
spring.redis.port=6379
spring.redis.password=123@456
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.max-wait=-1ms
spring.redis.jedis.pool.min-idle=0
&#xFF03;&#x7F13;&#x5B58;&#x914D;&#x7F6E;
spring.cache.cache-names=menus cache
spring.cache.redis.time-to-live=1800s
&#xFF03;&#x7AEF;&#x53E3;&#x914D;&#x7F6E;
server.port=8082
</code></pre>
<p>&#x914D;&#x7F6E;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x5B9E;&#x73B0;&#x7528;&#x6237;&#x8BA4;&#x8BC1;&#x7684;&#x914D;&#x7F6E;&#x3002;&#x7528;&#x6237;&#x8BA4;&#x8BC1;&#x4F7F;&#x7528;Spring Security &#x5B9E;&#x73B0;&#xFF0C;&#x56E0;&#x6B64;&#x9700;&#x8981;&#x9996;&#x5148;
&#x63D0;&#x4F9B;&#x4E00;&#x4E2A; UserDetails&#x7684;&#x5B9E;&#x4F8B;&#xFF0C;&#x5728;&#x4EBA;&#x4E8B;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;&#x767B;&#x5F55;&#x64CD;&#x4F5C;&#x662F;Hr&#x767B;&#x5F55;&#xFF0C;&#x6839;&#x636E;&#x524D;&#x9762;&#x7684;Hr&#x8868;&#x521B;&#x5EFA;Hr
&#x5B9E;&#x4F53;&#x7C7B;&#x5E76;&#x5B9E;&#x73B0; UserDetails &#x63A5;&#x53E3;&#xFF0C;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code class="lang-java"><span class="token keyword">import</span> <span class="token namespace">com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">JsonIgnore</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>security<span class="token punctuation">.</span>core<span class="token punctuation">.</span></span><span class="token class-name">GrantedAuthority</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>security<span class="token punctuation">.</span>core<span class="token punctuation">.</span>authority<span class="token punctuation">.</span></span><span class="token class-name">SimpleGrantedAuthority</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>security<span class="token punctuation">.</span>core<span class="token punctuation">.</span>userdetails<span class="token punctuation">.</span></span><span class="token class-name">UserDetails</span><span class="token punctuation">;</span>

<span class="token keyword">import</span> <span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">ArrayList</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Collection</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">List</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Objects</span><span class="token punctuation">;</span>

<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Hr</span> <span class="token keyword">implements</span> <span class="token class-name">UserDetails</span> <span class="token punctuation">{</span>
    <span class="token keyword">private</span> <span class="token class-name">Integer</span> id<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">String</span> phone<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">String</span> telephone<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">String</span> address<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">Boolean</span> enabled<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">String</span> username<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">String</span> password<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">String</span> userface<span class="token punctuation">;</span>

    <span class="token keyword">private</span> <span class="token class-name">String</span> remark<span class="token punctuation">;</span>
    <span class="token keyword">private</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Role</span><span class="token punctuation">&gt;</span></span> roles<span class="token punctuation">;</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">equals</span><span class="token punctuation">(</span><span class="token class-name">Object</span> o<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">this</span> <span class="token operator">==</span> o<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>o <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">||</span> <span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">!=</span> o<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
        <span class="token class-name">Hr</span> hr <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">Hr</span><span class="token punctuation">)</span> o<span class="token punctuation">;</span>
        <span class="token keyword">return</span> <span class="token class-name">Objects</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>username<span class="token punctuation">,</span> hr<span class="token punctuation">.</span>username<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">hashCode</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token class-name">Objects</span><span class="token punctuation">.</span><span class="token function">hash</span><span class="token punctuation">(</span>username<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Role</span><span class="token punctuation">&gt;</span></span> <span class="token function">getRoles</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> roles<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setRoles</span><span class="token punctuation">(</span><span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Role</span><span class="token punctuation">&gt;</span></span> roles<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>roles <span class="token operator">=</span> roles<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">Integer</span> <span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> id<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setId</span><span class="token punctuation">(</span><span class="token class-name">Integer</span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> name<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setName</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">?</span> <span class="token keyword">null</span> <span class="token operator">:</span> name<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getPhone</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> phone<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPhone</span><span class="token punctuation">(</span><span class="token class-name">String</span> phone<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>phone <span class="token operator">=</span> phone <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">?</span> <span class="token keyword">null</span> <span class="token operator">:</span> phone<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getTelephone</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> telephone<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setTelephone</span><span class="token punctuation">(</span><span class="token class-name">String</span> telephone<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>telephone <span class="token operator">=</span> telephone <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">?</span> <span class="token keyword">null</span> <span class="token operator">:</span> telephone<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> address<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setAddress</span><span class="token punctuation">(</span><span class="token class-name">String</span> address<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>address <span class="token operator">=</span> address <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">?</span> <span class="token keyword">null</span> <span class="token operator">:</span> address<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setEnabled</span><span class="token punctuation">(</span><span class="token class-name">Boolean</span> enabled<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>enabled <span class="token operator">=</span> enabled<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getUsername</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> username<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">isAccountNonExpired</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">isAccountNonLocked</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">isCredentialsNonExpired</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">isEnabled</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> enabled<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUsername</span><span class="token punctuation">(</span><span class="token class-name">String</span> username<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>username <span class="token operator">=</span> username <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">?</span> <span class="token keyword">null</span> <span class="token operator">:</span> username<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token annotation punctuation">@JsonIgnore</span>
    <span class="token keyword">public</span> <span class="token class-name">Collection</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token operator">?</span> <span class="token keyword">extends</span> <span class="token class-name">GrantedAuthority</span><span class="token punctuation">&gt;</span></span> <span class="token function">getAuthorities</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">SimpleGrantedAuthority</span><span class="token punctuation">&gt;</span></span> authorities <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span>roles<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">Role</span> role <span class="token operator">:</span> roles<span class="token punctuation">)</span> <span class="token punctuation">{</span>
            authorities<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">SimpleGrantedAuthority</span><span class="token punctuation">(</span>role<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">return</span> authorities<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getPassword</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> password<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPassword</span><span class="token punctuation">(</span><span class="token class-name">String</span> password<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>password <span class="token operator">=</span> password <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">?</span> <span class="token keyword">null</span> <span class="token operator">:</span> password<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getUserface</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> userface<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUserface</span><span class="token punctuation">(</span><span class="token class-name">String</span> userface<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>userface <span class="token operator">=</span> userface <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">?</span> <span class="token keyword">null</span> <span class="token operator">:</span> userface<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getRemark</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> remark<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setRemark</span><span class="token punctuation">(</span><span class="token class-name">String</span> remark<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>remark <span class="token operator">=</span> remark <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">?</span> <span class="token keyword">null</span> <span class="token operator">:</span> remark<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<h4 id="&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF1A;">&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF1A;</h4>
<ul>
<li><p>&#x81EA;&#x5B9A;&#x4E49;&#x7C7B;&#x7EE7;&#x627F;&#x81EA; UserDetails,&#x5E76;&#x5B9E;&#x73B0;&#x8BE5;&#x63A5;&#x53E3;&#x4E2D;&#x76F8;&#x5173;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x524D;&#x7AEF;&#x7528;&#x6237;&#x5728;&#x767B;&#x5F55;&#x6210;&#x529F;&#x540E;&#xFF0C;&#x9700;&#x8981;&#x83B7;&#x53D6;&#x5F53;&#x524D;&#x767B;&#x5F55;&#x7528;&#x6237;&#x7684;&#x4FE1;&#x606F;&#xFF0C;&#x5BF9;&#x4E8E;&#x4E00;&#x4E9B;&#x654F;&#x611F;&#x4FE1;&#x606F;&#x4E0D;&#x5FC5;&#x8FD4;&#x56DE;&#xFF0C;&#x4F7F;&#x7528;@JsonIgnore&#x6CE8;&#x89E3;&#x5373;&#x53EF;&#x3002;</p>
</li>
<li><p>&#x5BF9;&#x4E8E; isAccountNonExpired&#x3001;isAccountNonLocked&#x3001;isCredentialsNonExpired,&#x7531;&#x4E8E;Hr&#x8868;&#x5E76;&#x672A;&#x8BBE;&#x8BA1;&#x76F8;&#x5173;&#x5B57;&#x6BB5;&#xFF0C;&#x56E0;&#x6B64;&#x8FD9;&#x91CC;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;true,isEnabled&#x65B9;&#x6CD5;&#x5219;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x8FD4;&#x56DE;&#x3002;</p>
</li>
<li><p>roles &#x5C5E;&#x6027;&#x4E2D;&#x5B58;&#x50A8;&#x4E86;&#x5F53;&#x524D;&#x7528;&#x6237;&#x7684;&#x6240;&#x6709;&#x89D2;&#x8272;&#x4FE1;&#x606F;&#xFF0C;&#x5728; getAuthorities &#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;&#x5C06;&#x8FD9;&#x4E9B;&#x89D2;&#x8272;&#x8F6C;&#x6362;&#x4E3A;
List<grantedauthority>&#x7684;&#x5B9E;&#x4F8B;&#x8FD4;&#x56DE;&#x3002;</grantedauthority></p>
</li>
</ul>
<p>&#x63A5;&#x4E0B;&#x6765;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A; UserDetailsService&#x5B9E;&#x4F8B;&#x7528;&#x6765;&#x67E5;&#x8BE2;&#x7528;&#x6237;&#xFF0C;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Service</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">HrService</span> <span class="token keyword">implements</span> <span class="token class-name">UserDetailsService</span> <span class="token punctuation">{</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token class-name">HrMapper</span> hrMapper<span class="token punctuation">;</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token class-name">HrRoleMapper</span> hrRoleMapper<span class="token punctuation">;</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token class-name">UserDetails</span> <span class="token function">loadUserByUsername</span><span class="token punctuation">(</span><span class="token class-name">String</span> username<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">UsernameNotFoundException</span> <span class="token punctuation">{</span>
        <span class="token class-name">Hr</span> hr <span class="token operator">=</span> hrMapper<span class="token punctuation">.</span><span class="token function">loadUserByUsername</span><span class="token punctuation">(</span>username<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>hr <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">UsernameNotFoundException</span><span class="token punctuation">(</span><span class="token string">&quot;&#x7528;&#x6237;&#x540D;&#x4E0D;&#x5B58;&#x5728;!&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        hr<span class="token punctuation">.</span><span class="token function">setRoles</span><span class="token punctuation">(</span>hrMapper<span class="token punctuation">.</span><span class="token function">getHrRolesById</span><span class="token punctuation">(</span>hr<span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">return</span> hr<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p>&#x81EA;&#x5B9A;&#x4E49;HrService&#x5B9E;&#x73B0; UserDetailsService &#x63A5;&#x53E3;&#xFF0C;&#x5E76;&#x5B9E;&#x73B0;&#x8BE5;&#x63A5;&#x53E3;&#x4E2D;&#x7684;loadUserByUsemname&#x65B9;&#x6CD5;&#xFF0C;loadUserBy Username &#x65B9;&#x6CD5;&#x662F;&#x6839;&#x636E;&#x7528;&#x6237;&#x540D;&#x67E5;&#x8BE2;&#x7528;&#x6237;&#x7684;&#x6240;&#x6709;&#x4FE1;&#x606F;&#xFF0C;&#x5305;&#x62EC;&#x7528;&#x6237;&#x7684;&#x89D2;&#x8272;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x67E5;&#x5230;&#x76F8;&#x5173;&#x7528;&#x6237;&#xFF0C;&#x5C31;&#x629B;&#x51FA; UsernameNotFoundException &#x5F02;&#x5E38;&#xFF0C;&#x8868;&#x793A;&#x7528;&#x6237;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x5982;&#x679C;&#x67E5;&#x5230;&#x4E86;&#xFF0C;&#x5C31;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#xFF0C;&#x7531; Spring Security &#x6846;&#x67B6;&#x5B8C;&#x6210;&#x5BC6;&#x7801;&#x7684;&#x6BD4;&#x5BF9;&#x64CD;&#x4F5C;&#x3002;
&#x63A5;&#x4E0B;&#x6765;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x52A8;&#x6001;&#x914D;&#x7F6E;&#x6743;&#x9650;&#xFF0C;&#x56E0;&#x6B64;&#x8FD8;&#x9700;&#x8981;&#x63D0;&#x4F9B; FilterInvocationSecurityMetadataSource &#x548C;AccessDecisionManager&#x7684;&#x5B9E;&#x4F8B;&#x3002; 
FilterInvocationSecurityMetadataSource &#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Component</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CustomFilterInvocationSecurityMetadataSource</span> <span class="token keyword">implements</span> <span class="token class-name">FilterInvocationSecurityMetadataSource</span> <span class="token punctuation">{</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token class-name">MenuService</span> menuService<span class="token punctuation">;</span>
    <span class="token class-name">AntPathMatcher</span> antPathMatcher <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AntPathMatcher</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token class-name">Collection</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ConfigAttribute</span><span class="token punctuation">&gt;</span></span> <span class="token function">getAttributes</span><span class="token punctuation">(</span><span class="token class-name">Object</span> object<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IllegalArgumentException</span> <span class="token punctuation">{</span>
        <span class="token class-name">String</span> requestUrl <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token class-name">FilterInvocation</span><span class="token punctuation">)</span> object<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getRequestUrl</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Menu</span><span class="token punctuation">&gt;</span></span> menus <span class="token operator">=</span> menuService<span class="token punctuation">.</span><span class="token function">getAllMenusWithRole</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">Menu</span> menu <span class="token operator">:</span> menus<span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>antPathMatcher<span class="token punctuation">.</span><span class="token function">match</span><span class="token punctuation">(</span>menu<span class="token punctuation">.</span><span class="token function">getUrl</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> requestUrl<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Role</span><span class="token punctuation">&gt;</span></span> roles <span class="token operator">=</span> menu<span class="token punctuation">.</span><span class="token function">getRoles</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                <span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> str <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">[</span>roles<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
                <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> roles<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                    str<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> roles<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
                <span class="token keyword">return</span> <span class="token class-name">SecurityConfig</span><span class="token punctuation">.</span><span class="token function">createList</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">return</span> <span class="token class-name">SecurityConfig</span><span class="token punctuation">.</span><span class="token function">createList</span><span class="token punctuation">(</span><span class="token string">&quot;ROLE_LOGIN&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token class-name">Collection</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ConfigAttribute</span><span class="token punctuation">&gt;</span></span> <span class="token function">getAllConfigAttributes</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">supports</span><span class="token punctuation">(</span><span class="token class-name">Class</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token operator">?</span><span class="token punctuation">&gt;</span></span> clazz<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<h4 id="&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF1A;">&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF1A;</h4>
<ul>
<li>&#x5728;getAttributes &#x65B9;&#x6CD5;&#x4E2D;&#x9996;&#x5148;&#x63D0;&#x53D6;&#x51FA;&#x8BF7;&#x6C42; URL,&#x6839;&#x636E;&#x8BF7;&#x6C42;URL&#x5224;&#x65AD;&#x8BE5;&#x8BF7;&#x6C42;&#x9700;&#x8981;&#x7684;&#x89D2;&#x8272;&#x4FE1;&#x606F;&#x3002;</li>
<li>&#x901A;&#x8FC7; MenuService &#x4E2D;&#x7684; getAllMenu &#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x6240;&#x6709;&#x7684;&#x83B1;&#x5355;&#x8D44;&#x6E90;&#x8FDB;&#x884C;&#x6BD4;&#x5BF9;&#xFF0C;&#x8003;&#x8651;&#x5230;getAttributes&#x65B9;&#x6CD5;&#x5728;&#x6BCF;&#x4E00;&#x6B21;&#x8BF7;&#x6C42;&#x4E2D;&#x90FD;&#x4F1A;&#x8C03;&#x7528;&#xFF0C;&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x5C06; getAllMenu &#x65B9;&#x6CD5;&#x7684;&#x8FD4;&#x56DE;&#x503C;&#x7F13;&#x5B58;&#x4E0B;&#x6765;&#xFF0C;&#x4E0B;&#x4E00;&#x6B21;&#x8BF7;&#x6C42;&#x65F6;&#x76F4;&#x63A5;&#x4ECE;&#x7F13;&#x5B58;&#x4E2D;&#x83B7;&#x53D6;&#x3002;</li>
<li>&#x5BF9;&#x4E8E;&#x6240;&#x6709;&#x672A;&#x5339;&#x914D;&#x6210;&#x529F;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x9ED8;&#x8BA4;&#x90FD;&#x662F;&#x767B;&#x5F55;&#x540E;&#x8BBF;&#x95EE;&#x3002;</li>
</ul>
<p>AccessDecisionManager &#x4EE3;&#x7801;&#x5982;&#xFF1A;</p>
<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Component</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UrlAccessDecisionManager</span> <span class="token keyword">implements</span> <span class="token class-name">AccessDecisionManager</span><span class="token punctuation">{</span>
     <span class="token annotation punctuation">@override</span>
     <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">decide</span><span class="token punctuation">(</span><span class="token class-name">Authentication</span> auth<span class="token punctuation">,</span><span class="token class-name">Object</span> o<span class="token punctuation">,</span><span class="token class-name">Collection</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ConfigAttribute</span><span class="token punctuation">&gt;</span></span>cas<span class="token punctuation">)</span><span class="token punctuation">{</span>
        <span class="token class-name">Iterator</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ConfigAttribute</span><span class="token punctuation">&gt;</span></span>iterator<span class="token operator">=</span>cas<span class="token punctuation">.</span><span class="token function">iterator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">while</span> <span class="token punctuation">(</span>iterator<span class="token punctuation">.</span><span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
        <span class="token class-name">ConfigAttribute</span> ca<span class="token operator">=</span>iterator<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token class-name">String</span> needRole<span class="token operator">=</span>ca<span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token string">&quot;ROLE LOGIN&quot;</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>needRole<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>auth <span class="token keyword">instanceof</span> <span class="token class-name">AnonymousAuthenticationroken</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">BadCredentialsException</span><span class="token punctuation">(</span><span class="token string">&quot;&#x672A;&#x767B;&#x5F55;&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            &#xFF5D;<span class="token keyword">else</span> <span class="token punctuation">{</span>
            <span class="token keyword">return</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
       <span class="token class-name">Collection</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token operator">?</span><span class="token keyword">extends</span> <span class="token class-name">GrantedAuthority</span><span class="token punctuation">&gt;</span></span> authorities <span class="token operator">=</span> auth<span class="token punctuation">.</span><span class="token function">getAuthorities</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
       <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token class-name">GrantedAuthority</span> authority<span class="token operator">:</span>authorities<span class="token punctuation">)</span><span class="token punctuation">{</span>
          <span class="token keyword">if</span><span class="token punctuation">(</span>authority<span class="token punctuation">.</span><span class="token function">getAuthority</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>needRole<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
          <span class="token keyword">return</span><span class="token punctuation">;</span>
          <span class="token punctuation">}</span>
        &#xFF5D;
        &#xFF5D;

       <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">AccessDeniedException</span><span class="token punctuation">(</span><span class="token string">&quot;&#x6743;&#x9650;&#x4E0D;&#x8DB3;&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">supports</span><span class="token punctuation">(</span><span class="token class-name">ConfigAttribute</span> configAttribute<span class="token punctuation">)</span><span class="token punctuation">{</span>
    <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    &#xFF5D;
    <span class="token annotation punctuation">@Override</span>
     <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">supports</span><span class="token punctuation">(</span><span class="token class-name">Class</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token operator">?</span><span class="token punctuation">&gt;</span></span>aClass<span class="token punctuation">)</span><span class="token punctuation">{</span>
    <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Component</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CustomUrlDecisionManager</span> <span class="token keyword">implements</span> <span class="token class-name">AccessDecisionManager</span> <span class="token punctuation">{</span>
    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">decide</span><span class="token punctuation">(</span><span class="token class-name">Authentication</span> authentication<span class="token punctuation">,</span> <span class="token class-name">Object</span> object<span class="token punctuation">,</span> <span class="token class-name">Collection</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ConfigAttribute</span><span class="token punctuation">&gt;</span></span> configAttributes<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">AccessDeniedException</span><span class="token punctuation">,</span> <span class="token class-name">InsufficientAuthenticationException</span> <span class="token punctuation">{</span>
        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">ConfigAttribute</span> configAttribute <span class="token operator">:</span> configAttributes<span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token class-name">String</span> needRole <span class="token operator">=</span> configAttribute<span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">&quot;ROLE_LOGIN&quot;</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>needRole<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                <span class="token keyword">if</span> <span class="token punctuation">(</span>authentication <span class="token keyword">instanceof</span> <span class="token class-name">AnonymousAuthenticationToken</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                    <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">AccessDeniedException</span><span class="token punctuation">(</span><span class="token string">&quot;&#x5C1A;&#x672A;&#x767B;&#x5F55;&#xFF0C;&#x8BF7;&#x767B;&#x5F55;!&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                <span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token punctuation">{</span>
                    <span class="token keyword">return</span><span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
            <span class="token punctuation">}</span>
            <span class="token class-name">Collection</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token operator">?</span> <span class="token keyword">extends</span> <span class="token class-name">GrantedAuthority</span><span class="token punctuation">&gt;</span></span> authorities <span class="token operator">=</span> authentication<span class="token punctuation">.</span><span class="token function">getAuthorities</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">GrantedAuthority</span> authority <span class="token operator">:</span> authorities<span class="token punctuation">)</span> <span class="token punctuation">{</span>
                <span class="token keyword">if</span> <span class="token punctuation">(</span>authority<span class="token punctuation">.</span><span class="token function">getAuthority</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>needRole<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                    <span class="token keyword">return</span><span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">AccessDeniedException</span><span class="token punctuation">(</span><span class="token string">&quot;&#x6743;&#x9650;&#x4E0D;&#x8DB3;&#xFF0C;&#x8BF7;&#x8054;&#x7CFB;&#x7BA1;&#x7406;&#x5458;!&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">supports</span><span class="token punctuation">(</span><span class="token class-name">ConfigAttribute</span> attribute<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">supports</span><span class="token punctuation">(</span><span class="token class-name">Class</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token operator">?</span><span class="token punctuation">&gt;</span></span> clazz<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<h4 id="&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF1A;">&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF1A;</h4>
<ul>
<li>&#x5728;decide&#x65B9;&#x6CD5;&#x4E2D;&#x5224;&#x65AD;&#x5F53;&#x524D;&#x7528;&#x6237;&#x662F;&#x5426;&#x5177;&#x5907;&#x8BF7;&#x6C42;&#x9700;&#x8981;&#x7684;&#x89D2;&#x8272;&#xFF0C;&#x82E5;&#x8BE5;&#x65B9;&#x6CD5;&#x5728;&#x6267;&#x884C;&#x8FC7;&#x7A0B;&#x4E2D;&#x672A;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#xFF0C;&#x5219;&#x8BF4;&#x660E;&#x8BF7;&#x6C42;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#xFF1B;&#x82E5;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#xFF0C;&#x5219;&#x8BF4;&#x660E;&#x8BF7;&#x6C42;&#x6743;&#x9650;&#x4E0D;&#x8DB3;&#x3002;</li>
<li>&#x5982;&#x679C;&#x6240;&#x9700;&#x8981;&#x7684;&#x89D2;&#x8272;&#x662F; ROLE LOGIN,&#x90A3;&#x4E48;&#x53EA;&#x9700;&#x8981;&#x5224;&#x65AD; auth &#x4E0D;&#x662F;&#x533F;&#x540D;&#x7528;&#x6237;&#x7684;&#x5B9E;&#x4F8B;&#xFF0C;&#x5373;&#x8868;&#x793A;&#x5F53;&#x524D;&#x7528;&#x6237;&#x5DF2;&#x767B;&#x5F55;&#x3002;</li>
</ul>
<p>&#x63A5;&#x4E0B;&#x6765;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A; AccessDeniedHandler&#x7684;&#x5B9E;&#x4F8B;&#x6765;&#x8FD4;&#x56DE;&#x6388;&#x6743;&#x5931;&#x8D25;&#x7684;&#x4FE1;&#x606F;&#xFF1A;</p>
<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Component</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AuthenticationAccessDeniedHandler</span> <span class="token keyword">implements</span> <span class="token class-name">AccessDeniedHandler</span><span class="token punctuation">{</span>
    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">handle</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> httpServletRequest<span class="token punctuation">,</span><span class="token class-name">HttpServletResponse</span> resp<span class="token punctuation">,</span><span class="token class-name">AccessDeniedException</span> e<span class="token punctuation">)</span><span class="token keyword">throws</span> <span class="token class-name">IOException</span><span class="token punctuation">{</span>
      resp<span class="token punctuation">.</span><span class="token function">setStatus</span><span class="token punctuation">(</span><span class="token class-name">HttpServletResponse</span><span class="token punctuation">.</span><span class="token class-name">SC</span> FORBIDDEN<span class="token punctuation">)</span><span class="token punctuation">;</span>
      resp<span class="token punctuation">.</span><span class="token function">setContentType</span><span class="token punctuation">(</span><span class="token string">&quot;application/json;charset=UTF-8&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token class-name">Printwriter</span> out <span class="token operator">=</span> resp<span class="token punctuation">.</span><span class="token function">getwriter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token class-name">RespBean</span> error<span class="token operator">=</span><span class="token class-name">RespBean</span><span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">&quot;&#x6743;&#x9650;&#x4E0D;&#x8DB3;&#xFF0C;&#x8BF7;&#x8054;&#x7CFB;&#x7BA1;&#x7406;&#x5458;!&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      out<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token function">objectMapper</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">writeValueAsString</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      out<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      out<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p>&#x5F53;&#x6388;&#x6743;&#x5931;&#x8D25;&#x65F6;&#xFF0C;&#x5728;&#x8FD9;&#x91CC;&#x8FD4;&#x56DE;&#x6388;&#x6743;&#x5931;&#x8D25;&#x4FE1;&#x606F;&#x3002;
&#x5F53;&#x6240;&#x6709;&#x5DE5;&#x4F5C;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x914D;&#x7F6E;Spring Security &#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Configuration</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">WebSecurityConfig</span> <span class="token keyword">extends</span> <span class="token class-name">WebSecurityConfigurerAdapter</span> <span class="token punctuation">{</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token class-name">HrService</span> hrService<span class="token punctuation">;</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token class-name">CustomFilterInvocationSecurityMetadataSource</span> customFilterInvocationSecurityMetadataSource<span class="token punctuation">;</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token class-name">UrlAccessDecisionManager</span> urlAccessDecisionManager<span class="token punctuation">;</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token class-name">AuthenticationAccessDeniedHandler</span> deniedHandler<span class="token punctuation">;</span>
    <span class="token annotation punctuation">@override</span>
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">configure</span><span class="token punctuation">(</span><span class="token class-name">WebSecurity</span> web<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span><span class="token punctuation">{</span>  
     web<span class="token punctuation">.</span><span class="token function">ignoring</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">antMatchers</span><span class="token punctuation">(</span><span class="token string">&quot;/index.html&quot;</span><span class="token punctuation">,</span><span class="token string">&quot;/static/**&quot;</span><span class="token punctuation">,</span><span class="token string">&quot;/login_p&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    &#xFF5D;
    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">configure</span><span class="token punctuation">(</span><span class="token class-name">HttpSecurity</span> http<span class="token punctuation">)</span><span class="token keyword">throws</span> <span class="token class-name">Exception</span>
    http<span class="token punctuation">.</span><span class="token function">authorizeRequests</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">withobjectPostProcessor</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">AObectPostProcessor</span><span class="token punctuation">)</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">FiltersecurityInterceptor</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> &#xFF1C;o <span class="token keyword">extends</span> <span class="token class-name">FilterSecurityInterceptor</span><span class="token operator">&gt;</span><span class="token class-name">O</span> <span class="token function">postProcess</span><span class="token punctuation">(</span><span class="token class-name">O</span> o<span class="token punctuation">)</span><span class="token punctuation">{</span>
    o<span class="token punctuation">.</span><span class="token function">setSecurityMetadataSource</span><span class="token punctuation">(</span>metadataSource<span class="token punctuation">)</span><span class="token punctuation">;</span>
    o<span class="token punctuation">.</span><span class="token function">setAccessDecisionManager</span><span class="token punctuation">(</span>urlAccessDecisionManager<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> o<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
&#xFF5D;<span class="token punctuation">}</span>
   o<span class="token punctuation">.</span><span class="token function">and</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">formLogin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">loginPage</span><span class="token punctuation">(</span><span class="token string">&quot;/login p&quot;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">loginProcessingUrl</span><span class="token punctuation">(</span><span class="token string">&quot;/login&quot;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">usernameParameter</span><span class="token punctuation">(</span><span class="token string">&quot;username&quot;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">passwordParameter</span><span class="token punctuation">(</span><span class="token string">&quot;password&quot;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">failureHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">AuthenticationFailureHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
   <span class="token annotation punctuation">@Override</span>
   <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onAuthenticationFailure</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> req<span class="token punctuation">,</span><span class="token class-name">HttpServletResponse</span> resp<span class="token punctuation">,</span><span class="token class-name">AuthenticationException</span> e<span class="token punctuation">)</span><span class="token keyword">throws</span> <span class="token class-name">IOException</span><span class="token punctuation">{</span>
    wblugsnresp<span class="token punctuation">.</span><span class="token function">setContentType</span><span class="token punctuation">(</span><span class="token string">&quot;application/json;charset=utf-8&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token class-name">RespBean</span> respBean<span class="token operator">=</span><span class="token keyword">null</span><span class="token punctuation">;</span>
    <span class="token keyword">if</span><span class="token punctuation">(</span>e <span class="token keyword">instanceof</span> <span class="token class-name">BadCredentialsException</span> <span class="token operator">||</span> e <span class="token keyword">instanceof</span> <span class="token class-name">UsernameNotFoundException</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
      respBean<span class="token operator">=</span><span class="token class-name">RespBean</span><span class="token punctuation">.</span>error&#xFF08;<span class="token string">&quot;&#x8D26;&#x6237;&#x540D;&#x6216;&#x8005;&#x5BC6;&#x7801;&#x8F93;&#x5165;&#x9519;&#x8BEF;&#xFF01;&quot;</span>&#xFF09;<span class="token punctuation">;</span>
     &#xFF5D;<span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>e <span class="token keyword">instanceof</span> <span class="token class-name">LockedException</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
      respBean<span class="token operator">=</span><span class="token class-name">RespBean</span><span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">&quot;&#x8D26;&#x6237;&#x88AB;&#x9501;&#x5B9A;&#xFF0C;&#x8BF7;&#x8054;&#x7CFB;&#x7BA1;&#x7406;&#x5458;&#xFF01;&quot;</span>&#xFF09;<span class="token punctuation">;</span>
    &#xFF5D;<span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>e <span class="token keyword">instanceof</span> <span class="token class-name">CredentialsExpiredException</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
      respBean<span class="token operator">=</span><span class="token class-name">RespBean</span><span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>&quot;&#x5BC6;&#x7801;&#x8FC7;&#x671F;&#xFF0C;&#x8BF7;&#x8054;&#x7CFB;&#x7BA1;&#x7406;&#x5458;&#xFF01;&#x201D;&#xFF09;<span class="token punctuation">;</span>
    &#xFF5D;<span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>e <span class="token keyword">instanceof</span> <span class="token class-name">AccountExpiredException</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
     respBean<span class="token operator">=</span><span class="token class-name">RespBean</span><span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>&#x201C;&#x8D26;&#x6237;&#x8FC7;&#x671F;&#xFF0C;&#x8BF7;&#x8054;&#x7CFB;&#x7BA1;&#x7406;&#x5458;&#xFF01;&quot;&#xFF09;<span class="token punctuation">;</span>
    &#xFF5D;<span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>e <span class="token keyword">instanceof</span> <span class="token class-name">DisabledException</span><span class="token punctuation">)</span><span class="token punctuation">{</span>o
     respBean<span class="token operator">=</span><span class="token class-name">RespBean</span><span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>&#x201D;&#x8D26;&#x6237;&#x88AB;&#x7968;&#x7528;&#xFF0C;&#x8BF7;&#x8054;&#x7CFB;&#x7BA1;&#x7406;&#x5458;&#xFF01;&#x201D;&#xFF09;<span class="token punctuation">;</span>
    &#xFF5D;<span class="token keyword">else</span> <span class="token punctuation">{</span>
     respBean<span class="token operator">=</span><span class="token class-name">RespBean</span><span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>&#x201C;&#x767B;&#x5F55;&#x5931;&#x8D25;&quot;<span class="token punctuation">)</span><span class="token punctuation">;</span>
    &#xFF5D;
    resp<span class="token punctuation">.</span><span class="token function">setStatus</span><span class="token punctuation">(</span><span class="token number">401</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token class-name">ObjectMapper</span> om<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">ObjectMapper</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token class-name">Printwriter</span> out<span class="token operator">=</span>resp<span class="token punctuation">.</span><span class="token function">getwriter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span>
    out<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>om<span class="token punctuation">.</span><span class="token function">writeValueAsString</span><span class="token punctuation">(</span>respBean<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    out<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>eHsdeeoAnons
    out<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
 <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">successHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">AuthenticationSuccessHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
   <span class="token annotation punctuation">@Override</span>
   <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onAuthenticationSuccess</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> req<span class="token punctuation">,</span><span class="token class-name">HttpServletResponse</span> resp<span class="token punctuation">,</span><span class="token class-name">Authentication</span> auth<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IOException</span><span class="token punctuation">{</span>
   resp<span class="token punctuation">.</span><span class="token function">setContentType</span><span class="token punctuation">(</span><span class="token string">&quot;application/json;charset=utf-8&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token class-name">RespBean</span> respBean<span class="token operator">=</span><span class="token class-name">RespBean</span><span class="token punctuation">.</span><span class="token function">ok</span><span class="token punctuation">(</span>&quot;&#x767B;&#x5F55;&#x6210;&#x529F;&#xFF01;&#x201D;&#xFF0C;<span class="token class-name">HrUtils</span><span class="token punctuation">.</span><span class="token function">getCurrentHr</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token class-name">ObjectMapper</span> om<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">ObjectMapper</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token class-name">PrintWriter</span> out<span class="token operator">=</span>resp<span class="token punctuation">.</span><span class="token function">getwriter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   out<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>om<span class="token punctuation">.</span><span class="token function">writeValueAsString</span><span class="token punctuation">(</span>respBean<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>denoddiw
   out<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   out<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
&#xFF5D;<span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">permitA1l</span><span class="token punctuation">(</span><span class="token punctuation">)</span>oteooAltu<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">and</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">logout</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">permitA1l</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">land</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">csrf</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">disable</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">exceptionHandling</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">accessDeniedHandler</span><span class="token punctuation">(</span>deniedHandler<span class="token punctuation">)</span><span class="token punctuation">;</span>
   &#xFF5D;
<span class="token punctuation">}</span>
</code></pre>
<h3 id="&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF1A;">&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF1A;</h3>
<ul>
<li><p>&#x9996;&#x5148;&#x901A;&#x8FC7;@EnableGlobalMethodSecurity &#x6CE8;&#x89E3;&#x5F00;&#x542F;&#x57FA;&#x4E8E;&#x6CE8;&#x89E3;&#x7684;&#x5B89;&#x5168;&#x914D;&#x7F6E;&#xFF0C;&#x542F;&#x7528;@PreAuthorize&#x548C;@PostAuthorize&#x4E24;&#x4E2A;&#x6CE8;&#x89E3;&#x3002;</p>
</li>
<li><p>&#x5728;&#x914D;&#x7F6E;&#x7C7B;&#x4E2D;&#x6CE8;&#x5165;&#x4E4B;&#x524D;&#x521B;&#x5EFA;&#x7684;4&#x4E2A;Bean,&#x5728; AuthenticationManagerBuilder &#x4E2D;&#x914D;&#x7F6E;userDetailsService&#x548C;passwordEncoder.</p>
</li>
<li><p>&#x5728; WebSecurity &#x4E2D;&#x914D;&#x7F6E;&#x9700;&#x8981;&#x5FFD;&#x7565;&#x7684;&#x8DEF;&#x5F84;&#x3002;</p>
</li>
<li><p>&#x5728; HttpSecurity &#x4E2D;&#x914D;&#x7F6E;&#x62E6;&#x622A;&#x89C4;&#x5219;&#x3001;&#x8868;&#x5355;&#x767B;&#x5F55;&#x3001;&#x767B;&#x5F55;&#x6210;&#x529F;&#x6216;&#x5931;&#x8D25;&#x7684;&#x54CD;&#x5E94;&#x7B49;&#x3002;</p>
</li>
<li><p>&#x6700;&#x540E;&#x901A;&#x8FC7;accessDeniedHandler&#x914D;&#x7F6E;&#x5F02;&#x5E38;&#x5904;&#x7406;&#x3002;</p>
</li>
</ul>
<p>&#x53E6;&#x5916;&#xFF0C;&#x524D;&#x6587;&#x63D0;&#x5230;MenuService &#x4E2D;&#x7684; getAllMenu &#x65B9;&#x6CD5;&#x5728;&#x6BCF;&#x6B21;&#x8BF7;&#x6C42;&#x65F6;&#x90FD;&#x9700;&#x8981;&#x67E5;&#x8BE2;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x6548;&#x7387;&#x6781;&#x4F4E;&#xFF0C;&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x5C06;&#x8BE5;&#x6570;&#x636E;&#x7F13;&#x5B58;&#x4E0B;&#x6765;&#xFF0C;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Service</span>
<span class="token annotation punctuation">@Transactional</span>
<span class="token annotation punctuation">@CacheConfig</span><span class="token punctuation">(</span>cacheNames<span class="token operator">=</span><span class="token string">&quot;menus_cache&quot;</span><span class="token punctuation">)</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MenuService</span><span class="token punctuation">{</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token class-name">MenuMapper</span> menuMapper<span class="token punctuation">;</span>
    <span class="token annotation punctuation">@Cacheable</span><span class="token punctuation">(</span>key<span class="token operator">=</span><span class="token string">&quot;&#xFF03;root.methodName&quot;</span><span class="token punctuation">)</span>
    <span class="token keyword">public</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Menu</span><span class="token punctuation">&gt;</span></span><span class="token function">getAllMenu</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
       <span class="token keyword">return</span> menuMapper<span class="token punctuation">.</span><span class="token function">getAllMenu</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<h3 id="&#x6CE8;&#x610F;">&#x6CE8;&#x610F;</h3>
<blockquote>
<p>&#x8FD9;&#x91CC;&#x4F7F;&#x7528;&#x65B9;&#x6CD5;&#x540D;&#x4F5C;&#x4E3A;&#x7F13;&#x5B58;&#x7684;key,&#x53E6;&#x5916;&#x9700;&#x8981;&#x5728;&#x9879;&#x76EE;&#x542F;&#x52A8;&#x7C7B;&#x6DFB;&#x52A0;@EnableCashing&#x6CE8;&#x89E3;&#x5F00;&#x542F;&#x7F13;&#x5B58;&#x3002;</p>
</blockquote>
<p>PostMan&#x6D4B;&#x8BD5;&#xFF08;&#x5F85;&#x5199;&#xFF09;</p>
<h3 id="&#x524D;&#x7AEF;&#x5B9E;&#x73B0;">&#x524D;&#x7AEF;&#x5B9E;&#x73B0;</h3>
<h4 id="&#x5F15;&#x5165;element&#x548C;axios">&#x5F15;&#x5165;Element&#x548C;Axios</h4>
<p>&#x524D;&#x7AEF;UI&#x4F7F;&#x7528;Element&#xFF0C;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x5219;&#x4F7F;&#x7528;Axios&#xFF0C;
&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code>npm i element-ui -S
npm i axios -S
</code></pre><p>&#x4F9D;&#x8D56;&#x6DFB;&#x52A0;&#x6210;&#x529F;&#x540E;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x5728;main.js&#x4E2D;&#x5F15;&#x5165;Element
&#x4EE3;&#x7801;&#x5982;&#x4E0B;</p>
<pre class="language-"><code>import ElementUI from &apos;element-ui&apos;
import &apos;element-ui/lib/theme-chalk/index.css&apos;;
Vue.use(ElementUI)
</code></pre><p>&#x5F15;&#x5165;Element &#x4E4B;&#x540E;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x5C31;&#x53EF;&#x4EE5;&#x5728;&#x9879;&#x76EE;&#x4E2D;&#x76F4;&#x63A5;&#x4F7F;&#x7528;&#x76F8;&#x5173;&#x7EC4;&#x4EF6;&#x4E86;&#x3002;
&#x5BF9;&#x4E8E;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#xFF0C;&#x7531;&#x4E8E;&#x5728;&#x6BCF;&#x4E00;&#x6B21;&#x8BF7;&#x6C42;&#x65F6;&#x90FD;&#x9700;&#x8981;&#x5224;&#x65AD;&#x5404;&#x79CD;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x7136;&#x540E;&#x63D0;&#x793A;&#x7528;&#x6237;&#xFF0C;&#x4F8B;&#x5982;&#x8BF7;&#x6C42;&#x662F;&#x5426;&#x6210;&#x529F;&#x3001;&#x5931;&#x8D25;&#x7684;&#x539F;&#x56E0;&#x7B49;&#xFF0C;&#x8003;&#x8651;&#x5230;&#x8FD9;&#x4E9B;&#x5224;&#x65AD;&#x57FA;&#x672C;&#x4E0A;&#x90FD;&#x4F7F;&#x7528;&#x91CD;&#x590D;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x5C06;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x5C01;&#x88C5;&#xFF0C;&#x505A;&#x6210;Vue&#x7684;&#x63D2;&#x4EF6;&#x65B9;&#x4FBF;&#x4F7F;&#x7528;&#x3002;&#x7531;&#x4E8E;&#x5C01;&#x88C5;&#x7684;&#x4EE3;&#x7801;&#x6BD4;&#x8F83;&#x957F;&#xFF0C;&#x8FD9;&#x91CC;&#x5C31;&#x4E0D;&#x8D34;&#x51FA;&#x6765;&#x4E86;&#xFF0C;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x5728;GitHub &#x4E0A;&#x67E5;&#x770B;&#xFF0C;&#x5730;&#x5740;&#x4E3A; <a href="https://github.com/lenve/vhr/blob/master/vuehr/src/utils/api.js" target="_blank">app.js</a>&#x914D;&#x7F6E;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x5728;main.js&#x4E2D;&#x5BFC;&#x5165;&#x5C01;&#x88C5;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x7136;&#x540E;&#x914D;&#x7F6E;&#x4E3A;Vue&#x7684;prototype,&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code>import {postRequest} from &quot;./utils/api&quot;;
import {postKeyValueRequest} from &quot;./utils/api&quot;;
import {putRequest} from &quot;./utils/api&quot;;
import {deleteRequest} from &quot;./utils/api&quot;;
import {getRequest} from &quot;./utils/api&quot;;
import {initMenu} from &quot;./utils/menus&quot;;
import &apos;font-awesome/css/font-awesome.min.css&apos;
Vue.prototype.postRequest = postRequest;
Vue.prototype.postKeyValueRequest = postKeyValueRequest;
Vue.prototype.putRequest = putRequest;
Vue.prototype.deleteRequest = deleteRequest;
Vue.prototype.getRequest = getRequest;
</code></pre><p>&#x914D;&#x7F6E;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x5BF9;&#x4E8E;&#x4EFB;&#x4F55;&#x9700;&#x8981;&#x4F7F;&#x7528;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x7684;&#x5730;&#x5740;&#xFF0C;&#x90FD;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;this.XXX&#x6267;&#x884C;&#x4E00;&#x4E2A;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#xFF0C;&#x4F8B;&#x5982;&#x8981;&#x6267;&#x884C;&#x767B;&#x5F55;&#x8BF7;&#x6C42;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;this.postRequest(url,param)&#x6267;&#x884C;&#x3002;</p>
<h4 id="&#x5F00;&#x53D1;-login-&#x9875;&#x9762;">&#x5F00;&#x53D1; Login &#x9875;&#x9762;</h4>
<p>&#x63A5;&#x4E0B;&#x6765;&#x5728; components &#x76EE;&#x5F55;&#x4E0B;&#x521B;&#x5EFA; Login.vue &#x9875;&#x9762;&#x8FDB;&#x884C;&#x767B;&#x5F55;&#x9875;&#x9762;&#x5F00;&#x53D1;&#xFF0C;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-form</span>
                <span class="token attr-name">:rules</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>rules<span class="token punctuation">&quot;</span></span>
                <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loginForm<span class="token punctuation">&quot;</span></span>
                <span class="token attr-name">v-loading</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loading<span class="token punctuation">&quot;</span></span>
                <span class="token attr-name">element-loading-text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>&#x6B63;&#x5728;&#x767B;&#x5F55;...<span class="token punctuation">&quot;</span></span>
                <span class="token attr-name">element-loading-spinner</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>el-icon-loading<span class="token punctuation">&quot;</span></span>
                <span class="token attr-name">element-loading-background</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>rgba(0, 0, 0, 0.8)<span class="token punctuation">&quot;</span></span>
                <span class="token attr-name">:model</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loginForm<span class="token punctuation">&quot;</span></span>
                <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loginContainer<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h3</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loginTitle<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>&#x7CFB;&#x7EDF;&#x767B;&#x5F55;<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h3</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-form-item</span> <span class="token attr-name">prop</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>username<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-input</span> <span class="token attr-name">size</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>normal<span class="token punctuation">&quot;</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>text<span class="token punctuation">&quot;</span></span> <span class="token attr-name">v-model</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loginForm.username<span class="token punctuation">&quot;</span></span> <span class="token attr-name">auto-complete</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>off<span class="token punctuation">&quot;</span></span>
                          <span class="token attr-name">placeholder</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>&#x8BF7;&#x8F93;&#x5165;&#x7528;&#x6237;&#x540D;<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-input</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-form-item</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-form-item</span> <span class="token attr-name">prop</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>password<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-input</span> <span class="token attr-name">size</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>normal<span class="token punctuation">&quot;</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>password<span class="token punctuation">&quot;</span></span> <span class="token attr-name">v-model</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loginForm.password<span class="token punctuation">&quot;</span></span> <span class="token attr-name">auto-complete</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>off<span class="token punctuation">&quot;</span></span>
                          <span class="token attr-name">placeholder</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>&#x8BF7;&#x8F93;&#x5165;&#x5BC6;&#x7801;<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-input</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-form-item</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-form-item</span> <span class="token attr-name">prop</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>code<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-input</span> <span class="token attr-name">size</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>normal<span class="token punctuation">&quot;</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>text<span class="token punctuation">&quot;</span></span> <span class="token attr-name">v-model</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loginForm.code<span class="token punctuation">&quot;</span></span> <span class="token attr-name">auto-complete</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>off<span class="token punctuation">&quot;</span></span>
                          <span class="token attr-name">placeholder</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>&#x70B9;&#x51FB;&#x56FE;&#x7247;&#x66F4;&#x6362;&#x9A8C;&#x8BC1;&#x7801;<span class="token punctuation">&quot;</span></span> <span class="token attr-name">@keydown.enter.native</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>submitLogin<span class="token punctuation">&quot;</span></span><span class="token style-attr language-css"><span class="token attr-name"> <span class="token attr-name">style</span></span><span class="token punctuation">=&quot;</span><span class="token attr-value"><span class="token property">width</span><span class="token punctuation">:</span> 250px</span><span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-input</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span> <span class="token attr-name">:src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>vcUrl<span class="token punctuation">&quot;</span></span> <span class="token attr-name">@click</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>updateVerifyCode<span class="token punctuation">&quot;</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span><span class="token punctuation">&quot;</span></span><span class="token style-attr language-css"><span class="token attr-name"> <span class="token attr-name">style</span></span><span class="token punctuation">=&quot;</span><span class="token attr-value"><span class="token property">cursor</span><span class="token punctuation">:</span> pointer</span><span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-form-item</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-checkbox</span> <span class="token attr-name">size</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>normal<span class="token punctuation">&quot;</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>loginRemember<span class="token punctuation">&quot;</span></span> <span class="token attr-name">v-model</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>checked<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-checkbox</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>el-button</span> <span class="token attr-name">size</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>normal<span class="token punctuation">&quot;</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>primary<span class="token punctuation">&quot;</span></span><span class="token style-attr language-css"><span class="token attr-name"> <span class="token attr-name">style</span></span><span class="token punctuation">=&quot;</span><span class="token attr-value"><span class="token property">width</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span></span><span class="token punctuation">&quot;</span></span> <span class="token attr-name">@click</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>submitLogin<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>&#x767B;&#x5F55;<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-button</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>el-form</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">&gt;</span></span>

    export default {
        name: &quot;Login&quot;,
        data() {
            return {
                loading: false,
                vcUrl: &apos;/verifyCode?time=&apos;+new Date(),
                loginForm: {
                    username: &apos;admin&apos;,
                    password: &apos;123&apos;,
                    code:&apos;&apos;
                },
                checked: true,
                rules: {
                    username: [{required: true, message: &apos;&#x8BF7;&#x8F93;&#x5165;&#x7528;&#x6237;&#x540D;&apos;, trigger: &apos;blur&apos;}],
                    password: [{required: true, message: &apos;&#x8BF7;&#x8F93;&#x5165;&#x5BC6;&#x7801;&apos;, trigger: &apos;blur&apos;}],
                    code: [{required: true, message: &apos;&#x8BF7;&#x8F93;&#x5165;&#x9A8C;&#x8BC1;&#x7801;&apos;, trigger: &apos;blur&apos;}]
                }
            }
        },
        methods: {
            updateVerifyCode() {
                this.vcUrl = &apos;/verifyCode?time=&apos;+new Date();
            },
            submitLogin() {
                this.$refs.loginForm.validate((valid) =&gt; {
                    if (valid) {
                        this.loading = true;
                        this.postRequest(&apos;/doLogin&apos;, this.loginForm).then(resp =&gt; {
                            this.loading = false;
                            if (resp) {
                                this.$store.commit(&apos;INIT_CURRENTHR&apos;, resp.obj);
                                window.sessionStorage.setItem(&quot;user&quot;, JSON.stringify(resp.obj));
                                let path = this.$route.query.redirect;
                                this.$router.replace((path == &apos;/&apos; || path == undefined) ? &apos;/home&apos; : path);
                            }else{
                                this.vcUrl = &apos;/verifyCode?time=&apos;+new Date();
                            }
                        })
                    } else {
                        return false;
                    }
                });
            }
        }
    }
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>style</span><span class="token punctuation">&gt;</span></span><span class="token style"><span class="token language-css">
    <span class="token selector">.loginContainer</span> <span class="token punctuation">{</span>
        <span class="token property">border-radius</span><span class="token punctuation">:</span> 15px<span class="token punctuation">;</span>
        <span class="token property">background-clip</span><span class="token punctuation">:</span> padding-box<span class="token punctuation">;</span>
        <span class="token property">margin</span><span class="token punctuation">:</span> 180px auto<span class="token punctuation">;</span>
        <span class="token property">width</span><span class="token punctuation">:</span> 350px<span class="token punctuation">;</span>
        <span class="token property">padding</span><span class="token punctuation">:</span> 15px 35px 15px 35px<span class="token punctuation">;</span>
        <span class="token property">background</span><span class="token punctuation">:</span> #fff<span class="token punctuation">;</span>
        <span class="token property">border</span><span class="token punctuation">:</span> 1px solid #eaeaea<span class="token punctuation">;</span>
        <span class="token property">box-shadow</span><span class="token punctuation">:</span> 0 0 25px #cac6c6<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token selector">.loginTitle</span> <span class="token punctuation">{</span>
        <span class="token property">margin</span><span class="token punctuation">:</span> 15px auto 20px auto<span class="token punctuation">;</span>
        <span class="token property">text-align</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
        <span class="token property">color</span><span class="token punctuation">:</span> #505458<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token selector">.loginRemember</span> <span class="token punctuation">{</span>
        <span class="token property">text-align</span><span class="token punctuation">:</span> left<span class="token punctuation">;</span>
        <span class="token property">margin</span><span class="token punctuation">:</span> 0px 0px 15px 0px<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token selector">.el-form-item__content</span><span class="token punctuation">{</span>
        <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
        <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>style</span><span class="token punctuation">&gt;</span></span>
</code></pre><p>&#x914D;&#x7F6E;&#x8DEF;&#x7531;</p>
<pre class="language-"><code>import Vue from &apos;vue&apos;
import Router from &apos;vue-router&apos;
import Login from &apos;./views/Login.vue&apos;
import Home from &apos;./views/Home.vue&apos;
import FriendChat from &apos;./views/chat/FriendChat.vue&apos;
import HrInfo from &apos;./views/HrInfo.vue&apos;

Vue.use(Router)

export default new Router({
    routes: [
        {
            path: &apos;/&apos;,
            name: &apos;Login&apos;,
            component: Login,
            hidden: true
        }, {
            path: &apos;/home&apos;,
            name: &apos;Home&apos;,
            component: Home,
            hidden: true,
            meta: {
                roles: [&apos;admin&apos;, &apos;user&apos;]
            },
            children: [
                {
                    path: &apos;/chat&apos;,
                    name: &apos;&#x5728;&#x7EBF;&#x804A;&#x5929;&apos;,
                    component: FriendChat,
                    hidden: true
                }, {
                    path: &apos;/hrinfo&apos;,
                    name: &apos;&#x4E2A;&#x4EBA;&#x4E2D;&#x5FC3;&apos;,
                    component: HrInfo,
                    hidden: true
                }
            ]
        }, {
            path: &apos;*&apos;,
            redirect: &apos;/home&apos;
        }
    ]
})
</code></pre><p>&#x4FEE;&#x6539;&#x53BB;&#x9664;&#x9ED8;&#x8BA4;VueLogo</p>
<pre class="language-"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>app<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>router-view</span><span class="token punctuation">/&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
</code></pre><h6 id="&#x914D;&#x7F6E;&#x8BF7;&#x6C42;&#x8F6C;&#x53D1;">&#x914D;&#x7F6E;&#x8BF7;&#x6C42;&#x8F6C;&#x53D1;</h6>
<p>&#x4FEE;&#x6539;config&#x7684;index.js&#x6587;&#x4EF6;&#xFF0C;&#x4FEE;&#x6539;proxyTable&#xFF0C;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre class="language-"><code>

</code></pre><h6 id="&#x542F;&#x52A8;&#x524D;&#x7AEF;&#x9879;&#x76EE;">&#x542F;&#x52A8;&#x524D;&#x7AEF;&#x9879;&#x76EE;</h6>
<pre class="language-"><code> npm run dev
</code></pre><h4 id="&#x52A8;&#x6001;&#x52A0;&#x8F7D;&#x7528;&#x6237;&#x83DC;&#x5355;">&#x52A8;&#x6001;&#x52A0;&#x8F7D;&#x7528;&#x6237;&#x83DC;&#x5355;</h4>
<div class="mermaid">
flowchat
st=&gt;start: &#x5F00;&#x59CB;
e=&gt;end: &#x7ED3;&#x675F;
op=&gt;operation: &#x6211;&#x7684;&#x64CD;&#x4F5C;
cond=&gt;condition: &#x786E;&#x8BA4;&#xFF1F;

st-&gt;op-&gt;cond
cond(yes)-&gt;e
cond(no)-&gt;op
</div>





</div>

                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                
                <a href="java4.html#2" class="navigation navigation-next navigation-unique" aria-label="Next page: 微人事项目实战">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"JavaWeb实战项目","level":"1.12","depth":1,"next":{"title":"微人事项目实战","level":"1.12.1","depth":2,"anchor":"#2","path":"java4.md","ref":"java4.md#2","articles":[]},"previous":{"title":"项目构建","level":"1.11.2","depth":2,"ref":"","articles":[]},"dir":"ltr"},"config":{"plugins":["simple-mind-map","new-flowchart","mermaid-gb3@2.1.0","hide-element","-lunr","-search","search-plus@^0.0.11","back-to-top-button","openwrite","code","prism","-highlight","-livereload","expandable-chapters","timeline","todo","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"timeline":{},"prism":{"css":["prismjs/themes/prism-tomorrow.css"]},"new-flowchart":{},"todo":{},"code":{"copyButtons":true},"hide-element":{"elements":[".gitbook-link"]},"fontsettings":{"theme":"white","family":"sans","size":2},"mermaid-gb3":{},"openwrite":{"blogId":"18972-1576749538667-677","name":"谦谦君子","qrcode":"https://image.lichongbing.com/qrcode_for_gh_29bad7d68f3a_258.jpg","keyword":"更多"},"back-to-top-button":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"simple-mind-map":{"autoFit":true,"linkShape":"diagonal","preset":"colorful","style":{"height":"750px","wight":"1000px"},"type":"markdown"},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{},"search-plus":{}},"theme":"default","author":"snowdreams1006","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Java笔记Blog","links":{"sidebar":{"blog":"https://blog.lichongbing.com/"}},"gitbook":"3.2.3","description":"gitbook-plugin-simple-mind-map examples"},"file":{"path":"java4.md","mtime":"2020-10-29T10:18:26.539Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2020-11-06T13:32:17.508Z"},"basePath":".","book":{"language":""}});
        });
    </script>
</div>

        
    
    

    <script src="gitbook/gitbook.js"></script>
    <script src="gitbook/theme.js"></script>
    
        
        <script src="gitbook/gitbook-plugin-simple-mind-map/bundle.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-new-flowchart/raphael-min.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-new-flowchart/flowchart-1.6.2.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-new-flowchart/plugin.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-mermaid-gb3/book/plugin.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-hide-element/plugin.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-search-plus/search.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-back-to-top-button/plugin.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-code/plugin.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

<script src="https://my.openwrite.cn/js/readmore.js" type="text/javascript"></script>
<script>
var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
if (!isMobile) {
    var btw = new BTWPlugin();
    btw.init({
        "id": "vip-container",
        "blogId": "18972-1576749538667-677",
        "name": "谦谦君子",
        "qrcode": "https://image.lichongbing.com/qrcode_for_gh_29bad7d68f3a_258.jpg",
        "keyword": "更多"
    });
}
</script>

    <script src="gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.min.js"></script>


    </body>
</html>

